力扣125:判断字符串是否是回文字符串

题目描述:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。
字母和数字都属于字母数字字符。
给定一个字符串s,如果它是回文串,返回true;否则,返回false。

  • s仅由可打印的ASCII字符组成
  • 1<=s.length<=2*100000
    力扣125:判断字符串是否是回文字符串_第1张图片

题目分析:

  1. 引入双指针left,right,跳过非数字字母字符,其中left从前向后寻找第一个有效字符,right从后往前寻找第一个有效字符,若left!=right,找到反例,直接return false;
  2. left++,right–,继续上述流程,直至整个字符串遍历结束,left>=right,终止条件,说明此时没有反例,return true

代码实现:

 //判断回文串
    public static boolean  isPalindrome(String s)
    {
        //1.为了判断方便,直接将s转小写处理
        s=s.toLowerCase();
        //2.引入两个引用
        int left=0;
        int right=s.length()-1;
        //3.循环判断
        while(left<right)
        {
            //从左往右查找第一个有效数字字母字符
            while(left<right && !isVaildChar(s.charAt(left)))
            {
                //如果不是有效字符,则left++,进行跳过
                left++;
            }
            //从右向左查找第一个有效字符
            while(left<right && !isVaildChar(s.charAt(right)))
            {
                right--;
            }
            //是有效字符,进行比较
            if(s.charAt(left)!=s.charAt(right))
            {
                //找到反例
                return false;
            }
            //继续进行下一轮匹配
            left++;
            right--;
        }
        //循环结束,没有找到反例,则返回true
        return true;
    }
    public static boolean isVaildChar(char c)
    {
        if(c>='a' && c<='z')
        {
            return true;
        }
        if(c>='0' && c<='9')
        {
            return true;
        }
        return false;
    }

你可能感兴趣的:(算法,leetcode,算法,java,开发语言)