博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 680 Valid Palindrome II javascript解决方案
阅读量:5944 次
发布时间:2019-06-19

本文共 1777 字,大约阅读时间需要 5 分钟。

题意: 判断一个字符串,能否在最多去除1个字符的情况下,成为回文,即从头开始读和从尾开始读是一致的。 link:https://leetcode.com/problems/valid-palindrome-ii/description/

Attemp1: 利用str.split('').reverse().join(''), 可以很方便的反转字符串。 先判断这个字符串本身是不是回文,再对字符串执行个循环,一个个字符串去除比对,能否成为回文。 本身题目是easy 就懒得考虑性能了。 没想到Time exceeded, sad。。。

Attemp2: 用function外的变量attempt,记录去除字符数目,一旦超出1,返回false。 对字符从头开始进行循环,一半之前结束,比对 arr[0] (即头) 和 arr[arr.length - 1] (即尾) 是否一样,一样的话就去头去尾,一直到字符串的长度小于2。 当然,如果头尾不一样,tolerate++,如果tolerate > 1,直接out,不大于1,创建2个字符串,arr_left,就把arr[0]删除生成的arr,跟arr_right,就把arr[arr.length - 1]删除生成的arr,递归调用,返回 validPalindrome(arr_left) || validPalindrome(arr_right)。 有2个需要注意的地方: 1、不能直接用arr_left = arr; arr_left.splice(0, 1), 浅拷贝,对arr_left的任何操作会直接影响arr,后面的arr_right就会受到影响,有个trick: arr_left = JSON.parse(JSON.stringify(arr))。这样就不会指向同一个地址啦。 2、把string转换成array处理更方便。 if(!Array.isArray(str)){ str = str.split(‘’) } 3、leetCode在function外面定义的tolerate变量,在实际submit code执行的时候,会失效,得把tolerate写在function里面。 if(typeof tolerate === 'undefined'){ tolerate = 0; } 贴代码:

/** * @param {string} s * @return {boolean} */var validPalindrome = function(s, tolerate) {    if(typeof(tolerate) === 'undefined'){        tolerate = 0;    }    if(!Array.isArray(s)){        s = s.split('');    }    while(s.length > 1){        if(s[0] == s[s.length - 1]){            s.splice(0, 1);            s.splice(s.length - 1, 1);        }else{            tolerate++;            if(tolerate > 1)                return false;            let sLeft = JSON.parse(JSON.stringify(s));            sLeft.splice(0, 1);            let sRight = JSON.parse(JSON.stringify(s));            sRight.splice(sRight.length - 1);            return validPalindrome(sLeft, tolerate) || validPalindrome(sRight, tolerate);        }    }    return true;};复制代码

转载于:https://juejin.im/post/5a30f51df265da431d3cacc2

你可能感兴趣的文章
C# 判断两张图片是否一致,极快速
查看>>
个人在 laravel 开发中使用到的一些技巧(持续更新)
查看>>
Go开发之路 -- 指针类型
查看>>
java 打包的两种方式
查看>>
LINQ to Entities 不识别方法“System.String ToString()”,因此该方法无法转换为存储表达式。...
查看>>
java ADT生成带签名的apk
查看>>
Opencv笔记(九)——图像阈值
查看>>
Android Touch事件原理加实例分析
查看>>
对网页是否为当前展示标签页、是否最小化、以及是否后台运行进行监听
查看>>
听君一席话,胜读十年书
查看>>
2.pandas数据清洗
查看>>
base64转码java版
查看>>
人工智能AI-机器视觉CV-数据挖掘DM-机器学习ML-神经网络-[资料集合贴]
查看>>
秋季4类疾病患者忌吃螃蟹
查看>>
POJ 1328 Radar lnstallation 2
查看>>
jquery鼠标悬停突出显示
查看>>
iOS enum 定义与使用
查看>>
EXPLAIN PLAN获取SQL语句执行计划
查看>>
20189218 2018-2019-2 《密码与安全新技术专题》第9周作业
查看>>
Mybatis操作数据库实现主键自增长
查看>>