680. 验证回文字符串 Ⅱ

内容

给定一个非空字符串 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;
};

回到目录

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 8,423评论 0 7
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,726评论 19 139
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,699评论 0 13
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,478评论 0 4
  • 又是一年3.15,苹果爸爸前几天禁用了 JSPatch,就先不吐槽了,这里吐槽一下 iOS 系统上的两个 WebV...
    Tatinic阅读 7,440评论 1 2