zoukankan      html  css  js  c++  java
  • leetcode680

    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。

  • 相关阅读:
    2016.11.21随笔
    2016.11.19随笔
    年月日
    导航position:absolute
    360搜索(边框)
    导航代码position:relative
    邮箱注册代码
    2016.11.18随笔
    2016.11.17随笔
    个人简历网页版代码
  • 原文地址:https://www.cnblogs.com/asenyang/p/9735078.html
Copyright © 2011-2022 走看看