FCC题目 Check for Palindromes
2017-04-04 本文已影响32人
a1838b5b5d28
要求
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
函数参数的值可以为"racecar","RaceCar"和"race CAR"。
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
String.replace()
String.toLowerCase()
起初看到这么一个要求 小case吗!!分分钟搞定啊!于是如下代码出现了
function palindrome(str){
var arr=str.split('');//分割字符串为数组
var newarr=arr.reverse();//将数组反转
//比较数组
for(var i=0;i<arr.length;i++){
if(arr[i]!==newarr[i]){
return false;
}
}
return true;
}
理所当然 代码GG 于是google之,发现 reverse() 这个方法是在执行后会改变原数组而不是返回一个新数组
于是修改代码如下
function palindrome(str){
var arr=str.split('');//分割字符串为数组
var newarr=str.split('');//赋给另一个数组用来保存
arr.reverse();//将数组反转
//比较数组
for(var i=0;i<arr.length;i++){
if(arr2[i]!==newarr[i]){
return false;
}
}
return true;
}
然后 又GG
我又去检查发现题目给的样例里面还有大小写,特殊字符!!!
这才想到了题目给的提示
repalce() 利用正则替换字符串
totoLowerCase() 将字符串转换成小写
再次修改代码
function palindrome(str) {
// Good luck!
var str1=str.replace(/\W+/g,"");
str1=str1.replace(/\_+/g,"");
str1=str1.toLowerCase();
var arr=str1.split('');//定义将字符串打散后的数组
var newarr=str1.split('');//将该数组再次保存 后面会调用reverse方法将其改变, arr会发生变化 ,所以将数组另存一份为newarr
arr.reverse();//反转数组
//比较数组
for(var i=0;i<arr.length;i++){
if(arr[i]!==newarr[i]){
return false;
}
}
return true;
}
palindrome("not a palindrome");
Ctrl+Enter 完美!