解答
回文字符串特点关于中间字符或中间位置对称,就是左右对应字符是相等。
我们需要前后两个指针,每次我们只要保证指针指向字符是相等的,那这个字符串就是回文字符串,返回true;
当两个指针字符不相等时最多可以删除一个字符后继续比较,删除的字符可能是前面指针所指字符或者后面指针所指字符
#include <string>
using namespace std;
class Solution {
public:
bool validPalindrome(string s) {
//双指针
int left = 0;
int right = s.length()-1;
while (left<right)
{
//如果左右相等,则继续移动
if(s[left]==s[right])
{
left++;
right--;
}
else
{
//删除一个字符串来判断是否为回文字符串
return checkPalindrome(s,left+1,right)||checkPalindrome(s,left,right-1);
}
}
return true;
}
//验证是否为回文字符串
bool checkPalindrome(const string& s,int left,int right)
{
while (left<right)
{
if(s[left]==s[right])
{
left++;
right--;
}
else
{
return false;
}
}
return true;
}
};