给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 :
输入: "abca" 输出: True 解释: 你可以删除c字符。
该题主要就是运用双指针的方式,从头尾进行判断是否相等,若遇到不相等字符则左边或者右边去除一个字符然后重新判断剩下字符串是否是回文。
public static boolean validPalindrome(String s) {
int i = 0,j = s.length()-1;
while(i < j){
if(s.charAt(i) == s.charAt(j)){
i++;
j--;
}else{
//不相等的话,若没有删除字符,则删除左边或右边的字符再判断;若删除过一次,则不是回文串
if(del == 0){
del++;
return validPalindrome(s.substring(i,j)) || validPalindrome(s.substring(i+1,j+1));
}
return false;
}
}
return true;
}