给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
对于这道题,我们需要首先理解回文字符串的意思,就是遍历每个字符,与length-1-i的是否相等,由于限定了一个的误差范围,就肯定是前面或者后面的下一个与之相等,但是两种情况不一定我们需要分开来分别讨论。
按照这个思路我们可以写出:
class Solution {
public boolean validPalindrome(String s) {
int left = 0, right = s.length() - 1;
while(left < right ){
if(s.charAt(left ) != s.charAt(right )){
return isValid(s,left + 1, right ) || isValid(s, left , right - 1);
}
left ++;
right --;
}
return true;
}
public boolean isValid(String s, int left , int right ){
while(left < right ){
if(s.charAt(left ) != s.charAt(right )){
return false;
}
left ++;
right --;
}
return true;
}
}
由于只有一次机会,所以我们不需要设置一个范围量,直接使用return 两个情况的与集,只要有一种成功就算成功,但是由于只有一种情况是正确的我们需要分别使用两个不同的情况去考虑,,不能直接使用if来进行分别。