验证回文字符串 【LeetCode 字符串】

验证回文字符串html

给定一个字符串,验证它是不是回文串,只考虑字母和数字字符,能够忽略字母的大小写。java

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

示例 1:指针

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

示例 2:code

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

题解:使用两个指针,分别指向头和尾,从头找到一个是数字或是字母的字符,而后从尾开始找,也是找到一个是数字或是字母的字符,而后判断,不一样的话返回false,结果想到太多,错了不少次,仍是太菜了。htm

public class Main {
    public static void main(String[] args) {
        System.out.println(isPalindrome("0P"));
        System.out.println(isPalindrome(".,"));
        System.out.println(isPalindrome("A man, a plan, a canal: Panama"));
    }
    public static boolean isPalindrome(String s) {
        char[] c =s.toLowerCase().toCharArray();//都转成小写,转成字符数组
        int j=c.length-1;
        int i=0;
        while(i<j){
            while(i<j && !((c[i]>='0' && c[i]<='9')||(c[i]>='a' && c[i]<='z'))){ //找到一个数字或字母字符
                i++;
            }
            while(i<j && !( (c[j]>='0' && c[j]<='9') || (c[j]>='a' && c[j]<='z') )){
                j--;
            }

            if(i<c.length && j>=0 && c[i]==c[j]){ //这步不用再去想c[i]是否是数字或字母了,只要相等就i++,j--,
                i++;
                j--;
            }else {//不相等就返回
                return false;
            }
        }
        return true;
    }
}