[字符串]-125. 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true

示例 2:

输入: "race a car"
输出: false


解析:

验证回文串比较常见。回文串就是正反读都一样,例如:"level","noon"。这里加入了空格和数字进行混合。
只需要建立两个指针,left和right分别从字符的开头和结尾处开始遍历整个字符串,如果遇到非字母非数字的字符就跳过,继续向下一个,直到找到下一个或者遍历结束。如果遇到大写字母,就将其转换为小写字母。左右指针同时找到数字或者字母,进行比较,若相同,继续向下遍历;若不同,则返回false。
时间复杂度为 o(n);

Java代码

class Solution {
    public boolean isTure(char c){
        if(c>='a'&&c<='z')  return true;
        if(c>='A'&&c<='Z')  return true;
        if(c>='0'&&c<='9')  return true;
        return false;
    }
    public boolean isPalindrome(String s) {
        //两个指针 left right 
        //1.遇到大写换成小写 2.遇到非字母数字的字符跳过
        char[] ss = s.toCharArray();
        int left = 0;
        int right = s.length()-1;
        while(left<right){
            if(!isTure(ss[left])){ 
                left++;
            }
            else if(!isTure(ss[right])){
                right--;
            }
            else if(((ss[left]+32-'a')%32)!=((ss[right]+32-'a')%32)){//直接求余会出现问题 如 '0'和'P'求余的值相同
                return false;
            }
            else{
                left++;
                right--;
            }
        }
        return true;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,208评论 0 13
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,846评论 0 10
  •   引用类型的值(对象)是引用类型的一个实例。   在 ECMAscript 中,引用类型是一种数据结构,用于将数...
    霜天晓阅读 1,105评论 0 1
  • 2016年3月11日: “妈妈今天和我讲,只要我多喝牛奶长高高的,爸爸就会回家看我了!” 2016年5月10日 “...
    黍离a阅读 379评论 1 2
  • 文 | 琳琳七 我的一个英文老师说,微信就是反映一个人精,神,气最直接的窗口,所以在发文之前最好三思而后行。 其实...
    琳琳七阅读 341评论 0 1