680. 验证回文字符串 Ⅱ
题目:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: “aba”
输出: True
示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。
class Solution {
public:
//定义一个子函数来判断字符串是否是回文串
bool checkPalindrome(const string &s, int low , int high)
{
for(int i = low, j = high; i < j; i++,j--)
{
if(s[i] != s[j]) return false;
}
return true;
}
bool validPalindrome(string s) {
//前后双指针
int low = 0;
int high = s.size() - 1;
while(low < high)
{
//当前指针指向的两个字符相同,继续移动指针
if(s[low] == s[high])
{
low++;
high--;
}
//不同时,通过low+1和high-1来删除(跳过)一个字符继续判断
else
{
return checkPalindrome(s, low+1,high) || checkPalindrome(s, low, high-1);
}
}
return true;
}
};