给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
方法:双指针分别指向头尾,遇到不同的分别判断删除左右两边后剩下的是不是回文。
class Solution {
public boolean validPalindrome(String s) {
char[] ch = s.toCharArray();
int i = 0, j = ch.length - 1;
while(i < j && ch[i] == ch[j]){
i++;
j--;
}
if(isPalindrome(ch, i + 1, j))
return true;
if(isPalindrome(ch, i, j - 1))
return true;
return false;
}
private boolean isPalindrome(char[] ch, int i, int j){
while(i < j){
if(ch[i++] != ch[j--]){
return false;
}
}
return true;
}
}