验证回文串和验证回文字符串Ⅱ

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35508033/article/details/88929925

验证回文串

https://leetcode-cn.com/problems/valid-palindrome/

如“A man, a plan, a canal: Panama”就是一个回文,从头读和从尾往前读读出来是一样的
采用二分法,一个指针从左边遍历,一个从右边遍历,跳过非字母和非数字,当遍历到中点依然相同那就是回文

class Solution {
    public boolean isPalindrome(String s) {
        int i=0,j=s.length()-1;
        while(i<j){
            if(!isAlpha(s.charAt(i))){
                i++;
                continue;
            }
            if(!isAlpha(s.charAt(j))){
                j--;
                continue;
            }
            if(Character.toLowerCase(s.charAt(i))==Character.toLowerCase(s.charAt(j))){
                i++;
                j--;
                continue;
            }
            return false;
        }
        return true;
    }
    private boolean isAlpha(char c){
        if(c>='0'&&c<='9'||c>='a'&&c<='z'||c>='A'&&c<='Z'){
            return true;
        }
        return false;
    }
}

验证回文字符串Ⅱ

https://leetcode-cn.com/problems/valid-palindrome-ii/

使用双指针,一个指向头,一个指向尾,如果两者不相同了,则可以将尾部的往前挪一个,或者首部的往后挪一个,判断这两种情况

这两种已经相当于删除了一个字符,如果不是回文字符串,说明删除一个字符满足不了要求

class Solution {
    public boolean validPalindrome(String s) {
        int i=-1,j=s.length();
        while(++i<--j){
            if(s.charAt(i)!=s.charAt(j)){
                return isPalindrome(s,i+1,j)||isPalindrome(s,i,j-1);
            }
        }
        return true;
    }
    private boolean isPalindrome(String s,int i,int j){
        while(i<j){
            if(s.charAt(i++)!=s.charAt(j--)){
                return false;
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35508033/article/details/88929925