- 思路:双指针,左右指针,当出现了不相等的情况,先尝试删除左边的字符,在删除此字符的基础上单独对剩下的字符遍历,若又出现了不等的情况,记录flag=flase. 再尝试删除右边的字符,重复上面的过程,然后若是成功遍历完了删除后的所有字符(即l1>=l2时),则flag = true(这种情况是左边删除失败,但右边删除成功的情况)。 最后的return true是针对字符串本身就是回文字符串的情况,无需进行删除的情况。
class Solution {
public:
bool validPalindrome(string s) {
int left = 0, right = s.length()-1;
while(left<right){
if(s[left] != s[right]){
bool flag = true;
int l1,l2;
if(left+1<right){
l1 = left+1,l2 = right;
while(l1<l2){
if(s[l1++] != s[l2--]){
flag = false;
break;
}
}
}
if(flag == false && left <right - 1){
l1 = left, l2 = right-1;
while(l1<l2){
if(s[l1] != s[l2]) break;
++l1;--l2;
}
if(l1>=l2) flag = true;
}
if(flag == false) return false;
return true;
}
++left; --right;
}
return true;
}
};