题目

如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。函数参数的值可以为”racecar”,”RaceCar”和”race CAR”。

Tips

String.replace();

String.toLowerCase();

思路

用正则表达式验证字符串当中的标点符号和空格,用””替换,然后用toLowerCase()方法转为小写再进行比较。

代码

1
2
3
4
5
6
7
function palindrome(str) {
var re = /[\W_]/g;
var lowRegStr = str.toLowerCase().replace(re, '');
var reverseStr = lowRegStr.split('').reverse().join('');
return reverseStr === lowRegStr;
}
palindrome("A man, a plan, a canal. Panama");

但是写完以后感觉还不错的样子,于是上网上去搜索了一下这个问题还有那种解法,
然后又看到了几种解法(如下,忘记那位网友了),一句话解决问题了。

1
2
3
4
5
function palindrome(str) {
return str.replace(/[\W_]/g, '').toLowerCase() === str.replace(/[\W_]/g, '').toLowerCase().split('').reverse().join('');
}

palindrome("nope");
1
2
3
4
5
function palindrome(str) {
var normalizedStr = str.replace(/[\W_]/g, '').toLowerCase();
var reverseStr = normalizedStr.split('').reverse().join('');
return normalizedStr === reverseStr;
}

所以我感觉我还too young……
仔细观察了一下他的写法,直接return…能省去不必要的变量命名就省去,也算是学习了。