class Solution
{
public:
    bool validPalindrome(string s)
    {
        int len = s.length();
        if (len <= 2)
            return true;
        return judge(s, 0, len - 1, 1);
    }
private:
    bool judge(string s, int l, int r, int cnt)
    {
        while (l <= r - 1)
        {
            if (s[l] != s[r])
            {
                if (cnt <= 0)
                    return false;
                return judge(s, l + 1, r, cnt - 1) || judge(s, l, r - 1, cnt - 1);
            }
            l++; r--;
        }
        return true;
    }
};

参考网上的实现,递归解法。

主要思想是:双指针。

判断一个字符串是否是回文,基本的方法是使用双指针。一个从左向右遍历,一个从右向左遍历。

每次遍历进行判断,如果左和右不想等,那么就说明不是回文。

这道题是在判断回文的基础上,可以删除一个字符。

当左和右不想等的时候,有两种可能:左边的是多余字符,右边的是多余字符。

那么就尝试删除左边的或者尝试删除右边的,只要有一种情况能够满足回文,那就返回True。

posted on 2018-10-01 17:26  Sempron2800+  阅读(122)  评论(0编辑  收藏  举报