题目链接:
来自罗勇军《算法竞赛》尺取法一节的习题。
思路:反向扫描,设双指针为 \(i\) 和 \(j\)。
if (s[i] == s[j]) i++, j--;
否则的话要么删除 \(s[i]\) 或者删除 \(s[j]\),看剩下的字符串是否是回文串。
class Solution {
public:
bool check(string str, int l, int r) {
while (l < r) {
if (str[l] != str[r]) return false;
l++, r--;
}
return true;
}
bool validPalindrome(string &s) {
int n = s.size();
for (int i = 0, j = n - 1; i < j; ) {
if (s[i] == s[j]) i++, j--;
else {
return check(s, i, j - 1) || check(s, i + 1, j);
}
}
return true;
}
};
标签:return,int,++,II,有效,str,--,check,回文
From: https://www.cnblogs.com/pangyou3s/p/18198594