给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
我最初提交的答案是:
解题思路 :
- 首先剔除非数字和字母的字符
- 数组首尾进行比较,比较次数是数组长度的 length / 2( 这里不太严谨 ),如果有一个字符不相等,就退出循环 返回 false。
1 |
|
执行结果

执行时间长,内存消耗大。
最后改进版是:
方法一:正则表达式 和 双指针
1 | var isPalindrome = function(s) { |
方法二 :正则表达式,比较数组和反转数组是否相同
1 | var isPalindrome = function(s) { |
最后的总结是
- 正则表达式可以用来很好的匹配字符串
使用str.replace(正则表达式,替换结果)
,这个方法返回的是替换后的字符串。需要注意的是,正则表达式 /.../
默认是只匹配一个字符,通常我们需要这么写/.../g
- 双指针算法,
就是首尾字符挨个对比,当左边的下标大于右边的下标的时候,就不需要在进行循环。我第一次是让数组遍历长度的一半,是不太严谨的。
- String 和 Array 之间转换
Array 是 无法通过 ====
来判断是否相等,但是 String 可以。
1 | str = arry.join(''); |