验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

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

思路:双指针

代码:

class Solution {
    public boolean isPalindrome(String s) {
        if(s==""||s==null){
            return true;
        }
        int n=s.length();//n为s的长度
        boolean flag=true;//如果是回文,则为true。默认为true
        //判断回文
        //利用双指针进行判断
        int i=0,j=n-1;
        for(;i<j;i++,j--){
            char c1=Character.toLowerCase(s.charAt(i));//将两个字符都转换成小写
            char c2=Character.toLowerCase(s.charAt(j));
            while(i<j&&!Character.isLetterOrDigit(c1)){//如果字符属于字母或数字,就跳过,直到找到是字母或数字的字符为止
                c1=Character.toLowerCase(s.charAt(++i));
            }
            while(i<j&&!Character.isLetterOrDigit(c2)){
                c2=Character.toLowerCase(s.charAt(--j));
            }
            if(c1!=c2){//如果有不等的字符就说明不是回文
                flag=false;
                break;
            }
        }
        return flag;
    }
}
注意:这题里面如果没有一个字符是数字或者字母,也被认为是true
posted @ 2019-12-04 18:46  xbc121  阅读(131)  评论(0编辑  收藏  举报