代码实现如下:【直接递归,数据量不大,可以通过】class Solution
{
private:
bool dfs(string& s, int l, int r, bool flag)
{
if(l > r) return true;
if(s[l] == s[r])
return dfs(s, l+1, r-1, flag);
if(!flag) return false;
return dfs(s, l, r-1, false) or dfs(s, l+1, r, false);
}
public:
bool validPalindrome(string& s)
{
return dfs(s, 0, s.size()-1, true);
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
另一版代码如下:【迭代比较,遇到不相等才调用一个同样操作的函数】class Solution
{
private:
bool isValid(string& s, int lo, int hi)
{
while(lo < hi)
{
if(s[lo] != s[hi])
return false;
++lo, --hi;
}
return true;
}
public:
bool validPalindrome(string& s)
{
int lo = 0, hi = s.size() - 1;
while(lo < hi)
{
if(s[lo] != s[hi])
return isValid(s, lo, hi-1) || isValid(s, lo+1, hi);
++lo, --hi;
}
return true;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26