美文网首页
680. 验证回文字符串 Ⅱ

680. 验证回文字符串 Ⅱ

作者: 吃饭用盘装 | 来源:发表于2018-06-05 19:38 被阅读31次

    内容

    给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

    示例 1:

    输入: "aba"
    输出: True
    示例 2:

    输入: "abca"
    输出: True
    解释: 你可以删除c字符。
    注意:

    字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。


    思路

    当第一次遇到两个指针对应的字符不同时,可有两种策略,
    一:跳过指针1的字符
    二:跳过指针2的字符
    当跳过指针1的字符后,继续判断,如果出错,要返回到第一次出错的地方,然后进行策略二,如果策略二再次失败,则返回false


    代码

    /**
     * 
     * 思路:
     * 当第一次遇到两个指针对应的字符不同时,可有两种策略,
     * 一:跳过指针1的字符
     * 二:跳过指针2的字符
     * 当跳过指针1的字符后,继续判断,如果出错,要返回到第一次出错的地方,然后进行策略二,如果策略二再次失败,则返回false
     * @param {string} s
     * @return {boolean}
     */
    var validPalindrome = function (s) {
        var jumpCount = 0;
        var lastI = 0,
            lastJ = 0;
        for (var i = 0, j = s.length - 1; i <= j; i++, j--) {
            if (s[i] != s[j]) {
                if (jumpCount == 0) {
                    lastI = i;
                    lastJ = j;
                    i--;
                }
    
                if (jumpCount == 1) {
                    i = lastI;
                    j = lastJ;
    
                    j++;
                }
    
                if (jumpCount == 2) {
                    return false;
                }
                jumpCount++;
            }
        }
    
        return true;
    };
    

    回到目录

    相关文章

      网友评论

          本文标题:680. 验证回文字符串 Ⅱ

          本文链接:https://www.haomeiwen.com/subject/bsmmsftx.html