最近开始在freeCodeCamp上学习,对JavaScript的算法部分的题目进行记录,强化一下自己的知识点,也方便以后复习。
题目描述:
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
思考:
实现该函数需要我们先去掉字符串多余的标点符号和空格,这里需要用到String对象的replace()方法。
replace() 方法返回一个由替换值替换一些或所有匹配的模式后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的函数。在RegExp对象中,元字符是拥有特殊含义的字符,比如\w查找单词字符,\W查找非单词字符,\s查找空白字符,\S查找非空白字符,详情可参考JavaScript RegExp 对象,所以我们用str = str.replace(/[\W\s_]/gi``, '');
来去掉多余的非常规字符。
第一步实现之后我们只需要将字符串转换为小写,再利用数组的reverse()方法即可轻松实现。
function palindrome(str) {
str = str.toLowerCase().replace(/[\W\s_]/g, '');
return str === str.split("").reverse().join("");
}