给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
实例1:输入“aba” 输出true
实例2:输入“abac” 输出true
主要的算法思想
1.检测回文字符串
回文字符串的检测其实就是要设立两个指针,一个从最左边开始依次向右,另一个从最右边依次往左,直到两个指针重合时,两个指针的移动是同步的,看这两个指针指的字符是否每个都相同
2.最多删除一个
也就是在这个过程中,例如左边遍历到i,右边遍历到j时,出现了字符不相同的情况,我们可以用改变参数的方法来实现删除一个元素,改为(i+1,j)或者改为(i,j-1),两种情况都需要计算能否判断是回文字符串
class Solution{
public boolean validPalindrome(String s) {
for(int i = 0, j = s.length() - 1;i < j;i++,j--){
if(s.charAt(i) != s.charAt(j)){
//用了其他函数继续删除后的遍历
return isPalindrome(s,i,j-1) || isPalindrome(s,i+1,j);
}
}
return true;
}
private boolean isPalindrome(String s,int i,int j){
while(i < j){
if(s.charAt(i++) != s.charAt(j--)){
return false;
}
}
return true;
}
}