【思路】
-
暴力法: 对于每一个字符,将它删去,再验证剩下的字符是不是回文串。
时间复杂度:O(n^2) 会超时 -
使用左右指针
当所指的字符相同时 移动
当所指的字符不相同时,有两种情况
删掉左边的 和删掉右边的
此时验证这两种情况下的字符串是不是回文字符串
bool validPalindrome(string s) {
//Leetcode680: 验证回文字符串II
return (helpPali(s,0,s.size()-1));
}
bool helpPali(string s, int left, int right) {
while (left <= right) {
if (s[left] == s[right]) {
left++;
right--;
}
else {
return isPali(s, left, right - 1) || isPali(s, left + 1, right);
}
}
return true;
}
bool isPali(string s, int left, int right) {
for (int i = left, j = right; i < j; i++, j--) {
if (s[i] != s[j]) return false;
}
return true;
}
网友评论