329. 验证回文字符串 Ⅱ

44 阅读1分钟

给定一个非空字符串 s最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: s = "aba"
输出: true

示例 2:

输入: s = "abca"
输出: true
解释: 你可以删除c字符。

示例 3:

输入: s = "abc"
输出: false

提示:

  • 1 <= s.length <= 105
  • s 由小写英文字母组成
public static boolean validPalindrome(String s) {
    if(null == s){
        return false;
    }
    int length = s.length();
    if(length == 1){
        return true;
    }
    for (int i = 0,j=length-1; i < length && i<j; i++,j--){
        if(s.charAt(i) != s.charAt(j)){
            if(!validPalindrome(s,i+1,j) && !validPalindrome(s,i,j-1)){
                return false;
            }
            if(validPalindrome(s,i+1,j) || validPalindrome(s,i,j-1)){
                return true;
            }
        }
    }
    return true;
}

private static boolean validPalindrome(String s,int i,int j) {
    for(;i<j;i++,j--){
        if(s.charAt(i) != s.charAt(j)){
            return false;
        }
    }
    return true;
}