题目描述:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例:
输入: "A man, a plan, a canal: Panama"
输出: true
解答
方法一:用api就完事儿
var isPalindrome = function(s) {
let strArr = s.replace(/[^0-9a-zA-Z]/g,"").toLowerCase().split('');
return strArr.join('') == strArr.reverse().join('');
};
补充:
[^abc] 匹配任何没有包含在方括号中的字符。
String.prototype.split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。
Array.prototype.join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目,那么将返回该项目而不使用分隔符。
简单来说:
- 字符串==>数组:split()
- 数组==>字符串:join()
方法二:格式化+双指针逼近
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;
};