Check for Palindromes-FCC
問題:
检查回文字符串
如果给定的字符串是回文,返回true,反之,返回false。
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。
注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
函数参数的值可以为"racecar","RaceCar"和"race CAR"。
当你完成不了挑战的时候,记得开大招'Read-Search-Ask'。
这是一些对你有帮助的资源:
要求:
palindrome("eye") 应该返回一个布尔值palindrome("eye") 应该返回 true.palindrome("race car") 应该返回 true.palindrome("not a palindrome") 应该返回 false.palindrome("A man, a plan, a canal. Panama") 应该返回 true.palindrome("never odd or even") 应该返回 true.palindrome("nope") 应该返回 false.palindrome("almostomla") 应该返回 false.palindrome("My age is 0, 0 si ega ym.") 应该返回 true.palindrome("1 eye for of 1 eye.")应该返回 false.palindrome("0_0 (: /-\ :) 0-0") 应该返回 true.
思路:
由于回文数是指从中间起,两边的字符调换后与原字符一致,所以进行如下操作——
1.
将参数去掉标点符号及空格:replace(/[\W_]/g,"") //[]:定义匹配的字符范围 \W:匹配任何非单词字符 _:为了最后一项去掉_ g:全局匹配
将参数转换为小写:toLowerCase()
2.
考虑到回文数的定义,只需要调换字符串即可:reverse()
但是因为reverse() 是对数组进行操作,所以应该先把参数转换为数组:split("") //split():将字符串按指定的规则裁切并转换为数组 “”:按字符串每一个字符裁切
因为最后要比较字符串,所以再将数组转为字符串:join("") //join():通过指定的分隔符(默认是逗号)把数组中的所有元素放入一个字符串 "":使用“空”分隔(其实就是不分隔...)
3.
第一步是对传参修饰,第二步是对第一步的后续加工,将其赋值给一个变量即可
最后返回比较两个变量的结果:return 传参===变量;
1 function palindrome(str) {
2 // 请把你的代码写在这里
3 str = str.replace(/[\W_]/g,"").toLowerCase();
4 var restr = str.split("").reverse().join("");
5 return str===restr;
6 }
7
8
9
10 palindrome("A man, a plan, a canal. Panama");
记录的原因是之前某招聘题目遇到过,当时的想法是从传参中间破开,使用charAt对比对位的字符...
今天练习FCC的时候又遇到了,突然发现使用变换更快= =(心碎)
所以记录下来,希望给自己警示,同时希望给有迷惑的小伙伴一点丝毫不存在的帮助蛤蛤蛤
そこまでだ

浙公网安备 33010602011771号