leetcode 125.回文字符串
题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解析题目:
首先明确什么是回文字符串,就是一个字符串的前半部分等于后半部分反转后的结果。比如:abccba就是回文,nmpmnb就不是回文
思路一:
用正则提取字母和数字字符,然后反转对比。(字符串转数组,反转数组,数组转字符串)。
var isPalindrome = function (s) {
s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase() //转换成字符串
let news = s.split("").reverse().join("") //字符串转数组,反转数组,数组转字符串
if(s === news){
return true
}else {
return false
}
}
思路二:
双指针:
用正则提取字母和数字字符,然后让第一个指针在最左边,第二个指针在最右边,两个指针同时走,看值是否相等
var isPalindrome = function(s) {
s = s.replace(/[^0-9a-zA-Z]/g, '').toLowerCase() //转换成字符串
let left = 0;
let right = s.length-1
while (left < right) {
if(s[left] != s[right]){ //如果有一个不相等就停止
return false
}
left++
right--
}
return true
};
不积跬步无以至千里