Leetcode 680 验证回文字符串②
问题重述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:输入: “aba” 输出: True
示例 2:输入: “abca” 输出: True
解释: 你可以删除c字符。
思路
用递归的思想,双指针,判断s[low],s[high]是否相等,相等就++low,–high。如果不相等,就通过自己写的check函数来判断s[low+1],s[high]或者s[low],s[high]是否相等(因为可以删除一个字符)
最终代码
class Solution {
public:
bool check (const string& s, int low, int high) {
while (low < high) {
if (s[low] != s[high]) {
return 0;
}
++low;
--high;
}
return 1;
}
bool validPalindrome(string s) {
int low = 0, high = s.size() - 1;
while (low < high) {
char c1 = s[low], c2 = s[high];
if (c1 == c2) {
++low;
--high;
} else {
return check (s, low, high - 1) || check (s, low + 1, high);
}
}
return 1;
}
};