思路:双指针,将复杂度降到O(n)
具体思路:l=0 r=n-1 如果s[l]==s[r]则l++;r–; 否则只要s[l+1,r]或者s[l,r-1]是回文即可
class Solution {
public:
bool valid(const string &s, int l, int r) {
while (l < r) {
if (s[l] != s[r]) return false;
l++;r--;
}
return true;
}
bool validPalindrome(string s) {
int l =0, r = s.size() - 1;
while (l < r) {
if (s[l] == s[r]) {
l++;
r--;
}else {
return valid(s, l + 1, r) || valid(s, l, r - 1);
}
}
return true;
}
};