JS回文检查(FreeCodeCamp项目)的思路和最终代码 需求 如果传入的字符串是回文字符串,则返回 true 。 否则返回 false 回文 palindrome ,指在忽略标点符号、大小写和空格的前提下,正着读
如果传入的字符串是回文字符串,则返回 true
。 否则返回 false
回文 palindrome,指在忽略标点符号、大小写和空格的前提下,正着读和反着读一模一样。
注意:检查回文时,你需要先去除所有非字母数字的字符(标点、空格和符号),并将所有字母都转换成大写或都转换成小写。
测试结果要求palindrome("eye")
应返回一个布尔值。
palindrome("eye")
应返回 true
。
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
。
palindrome("five|\_/|four")
应返回 false
。
已给框架
function palindrome(str) {
return true;
}
palindrome("eye");
需求分析(解题思路)
首先判断字符串是否为回文(正着读反着读都一样)
var newStr = "";// 创建一个空的String型以存放倒过来的字符串
// 将字符(str) 倒着插入 新建的空的String型(newStr)
// 1、在for循环里var一个i变量,其初始值为 字符串长度-1(为了让i等于字符串的最后一个字符的索引值),让i不断减小,直至减小到0
// 2、将数组里的第i个字符依次添加到newStr里
for(var i = str.length - 1;i >= 0;i--) {
newStr += str[i];
}
// 返回 判断两个字符串是否相等 的布尔值
return str == newStr;
接着,满足 删除原字符串里除了字母数字以外的东西 的需求
注意:这个需要写在 判断回文 前面
// 去除字母数字以外的字符
// 1、判断字符串中是否包含0-9,a-z,A-Z以外的符号
// 2、如果有,将它们删除(翻译:将它们改成“”)
if(str.match(/[^0-9a-zA-Z]/)) {
while (str.match(/[^0-9a-zA-Z]/)) {
str = str.replace(/[^0-9a-zA-Z]/,"");
}
}
// 把所有空格删除
// 思路和 去除字母数字以外的字符 一样
if(str.match(" ")) {
while (str.match(" ")) {
str = str.replace(" ","");
}
}
最后,满足 将所有字母都转换成大写或都转换成小写 的需求
注意:这个也需要写在 判断回文 前面
// 把所有字母转成小写
str = str.toLowerCase();
最终代码
function palindrome(str) {
// 去除字母数字以外的字符
if(str.match(/[^0-9a-zA-Z]/)) {
while (str.match(/[^0-9a-zA-Z]/)) {
str = str.replace(/[^0-9a-zA-Z]/,"");
}
}
// 把所有字母转成小写
str = str.toLowerCase();
// 把所有空格删除
if(str.match(" ")) {
while (str.match(" ")) {
str = str.replace(" ","");
}
}
// 回文检查
var newStr = "";
for(var i = str.length - 1;i >= 0;i--) {
newStr += str[i];
}
return str == newStr;
}
palindrome("eye");