题目 验证回文字符串
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
题解 双指针
题目并不是很难,思路也很清晰,一个指针l从左往右,一个指针r从右向左,如果两个指针的值不相等,就分为两部分,[l + 1, r] || [l, r - 1]
任意一部分为回文字符串都可以!
一开始我并没有写成函数的形式,用了if语句,处理边界条件时候比较难受,所以要在合适的时候写函数,会简化很多!
附完整代码:
class Solution {
public:
bool judge(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 len = s.size();
int l = 0;
int r = len - 1;
vector<int> flag(2, 1);
while(l < r){
if(s[l] == s[r]){
++l;
--r;
}
else{
return judge(s, l + 1, r) || judge(s, l, r - 1);
}
}
return true;
}
};