给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: “aba”
输出: True
示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。
注意:
字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。
题解 :
注意这里是分别删除一个字符 之后 再次判断剩下的两个是否能够成回文!
class Solution {
public boolean validPalindrome(String s) {
int low = 0;
int high = s.length() - 1;
while(low < high){
char c1 = s.charAt(low);
char c2 = s.charAt(high);
if(c1 == c2){
low++;
high--;
}else{
//默认删除后的两个都是回文
boolean flag1 = true;
boolean flag2 = true;
//这里分别删除头尾两个字符 判断是否够成回文 这里需要复制给一个新的指针 ij
for(int i = low + 1,j = high;i < j;i++,j--){
if(s.charAt(i) != s.charAt(j)){
flag1 = false;
break;
}
}
for(int i = low,j = high - 1;i < j;i++,j--){
//如果再次有不同的字符 就需要删除一个字符后 还不是回文了
if(s.charAt(i) != s.charAt(j)){
flag2 = false;
break;
}
}
return flag1 || flag2;
}
}
return true;
}
}