给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
这题:不好说,挺坑。
在双指针判断过程中,如果出现不相等的情况,那么只有一次机会去删除字符,当前i,j指针,那么删除的情况就是
删除i 从i+1,j都是回文
删除j 从i,j-1都是回文。 只能删这一次。即在主函数如果删除了一次不行就必须终止。return false.
所以就是 return isPinm(array,i+1,j) || isPinm(array,i,j-1)的情况。或,当其中存在1个都满足就true.都为false就不能满足。
class Solution {
public boolean validPalindrome(String s) {
char[] arrays = s.toCharArray();
int i = 0;
int j = arrays.length - 1;
while(i <= j){
if(arrays[i] == arrays[j])
{
i++;
j--;
}else{
return isPronm(arrays,i+1,j) || isPronm(arrays,i,j-1);
}
}
return true;
}
public static boolean isPronm(char[] array,int i,int j){
while(i < j){
if(array[i]==array[j])
{
i++;
j--;
}else{
return false;
}
}
return true;
}
}