二刷680. Valid Palindrome II

这道题用暴力法tle了,注意一下用two pointers先左右遍历原字符串,如果没有需要替换的,直接返回true. 如果遇到左右指针指的字符不相等的情况,则检查删掉左边这个或者删掉右边那个剩下的是不是回文就行。

class Solution {
    public boolean validPalindrome(String s) {
        if (s == null || s.length() == 0){
            return true;
        }    
        int l = 0;
        int r = s.length() - 1;
        while (l <= r){
            if (s.charAt(l) != s.charAt(r)){
                return isPalindrome(s, l+1, r) || isPalindrome(s, l, r - 1);
            } else {
                l++;
                r--;
            }
        }
        return true;
        
    }
    
    private boolean isPalindrome(String s, int l, int r){
        char[] chars = s.toCharArray();
        int i = l;
        int j = r;
        while (i <= j){
            if (chars[i] != chars[j]){
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
}

你可能感兴趣的:(二刷680. Valid Palindrome II)