要求:
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
function palindrome(str) {
var movestr = str.replace( /\W+/g ,'');
//正则表达式筛选所有非单词字符,替换为空的字符串
movestr = movestr.replace(/\_+/g,'');
//正则表达式筛选所有下划线字符,替换为空的字符串
movestr = movestr.toLowerCase();
var spstr = movestr.split('');
var restr = spstr.reverse();
var newstr = restr.join('');
if(newstr===movestr){
return true;
}
else{
return false;
}
}
palindrome("eye");
新手水平,还是写的规规矩矩,后面去搜了别人的写法,发现还有其他思路来解决,感谢别人的分享,学习了不少,暂时找到两个优化的思路:
其一:
function palindrome(str) {
str = str.replace(/[^A-Za-z0-9]/g,'').toLowerCase();
//正则表达式直接索引匹配以A-Z、a-z、0-9字符串和数字开始的,字符串转换为小写
for(var i=0;i<str.length/2;i++){
//取字符串一半的长度,进行循环
if(str[i]!==str[str.length-i-1]){
//对字符串对应位置根据回文规则判断,是否相等(第一位对最后一位,第二位对倒数第二位,以此类推)
return false;
}
}
return true;
}
palindrome("eye");
其二:
function palindrome(str) {
var re = /[\W\s_]/gi;
// 转义字符\W,非单词字符和空白字符并且不区分大小写
str = str.replace(re,"");
return str.toLowerCase() === str.split("").reverse().join("").toLowerCase();
}
palindrome("eye");