验证回文字符串II
题目解析
根据题目可知,有两种情况可以算作true,一是整个字符串本身就是回文串,二是,在仅删除一个字符的情况下成为回文串。
代码实现
根据题目,我们可以先对正常情况进行考虑,由两端开始向中间进行比较,若都相等则是回文串,返回true(该过程可封装成一个函数,后续方便使用)。若碰到不等的情况,再考虑未比较的字符串在删除左端一个字符(使左指针+1)或者删除右端一个字符(使右指针-1)后,剩下的部分是否为回文串,若是则返回true,不是则返回false。
在判断
class Solution {
public:
bool validPalind(string s, int &l, int &r){
while(l < r){
if(s[l] == s[r]){
l++;
r--;
}else{
return false;
}
}
return true;
}
bool validPalindrome(string s) {
int l = 0, r = s.size()-1;
if(validPalind(s,l,r)) return true;
else{
int x = l+1;
int y = r-1;
return(validPalind(s,x,r) || validPalind(s,l,y));
}
}
};