我遇到了回文功能问题。 这是我的功能:
function palindrome(str) {
var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");
for(var i=0; i < (newStr.length)/2; i++){
if(newStr[i] == newStr[newStr.length-i-1]){
return true;
} else
return false;
}
} palindrome("almostomla");
每个单词都很顺利,除了这个单词“almostomla”和其他类似单词,例如:“amariorama”,它是不正确的。为什么会这样?
答案 0 :(得分:1)
您的代码失败,因为您在循环的第一次迭代时返回。您应该只在结束时返回 - 或者如果检查失败,您可以立即返回。
function palindrome(str) {
var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");
for(var i=0; i < (newStr.length)/2; i++){
if(newStr[i] == newStr[newStr.length-i-1]){
//return true;
} else
return false;
}
return true;
}
这可以重构为删除else
function palindrome(str) {
var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");
for(var i=0; i < (newStr.length)/2; i++){
if(newStr[i] !== newStr[newStr.length-i-1]){
return false;
}
}
return true;
}
答案 1 :(得分:1)
首先,你在循环中使用return语句,只在检查数组的第一个和最后一个元素之后执行,然后函数返回false,这是错误的。
另外,请注意:almostomla和amariorama不是pallindrome 使用reverse()方法可以很容易地检查pallindrome如下:
function palindrome(s) {
var reverseString = s.split("").reverse().join("");
if(s==reverseString)
console.log("palindrome");
else
console.log("not palindrome");
}
palindrome("almostomla");
答案 2 :(得分:0)
回文是一个单词,短语,数字或其他字符序列,它们向后读取与向前相同的字符,例如女士或赛车。当调整大写字母,标点符号和分词器时,可以写出句子长度的句子,例如“一个男人,一个计划,一条运河,巴拿马!”,“这是我看到的汽车还是猫? “或尼克松的“不'x'。”
在上面的代码中,您只检查字符串的第一个和最后一个字符,您需要检查整个字符串。
function palindrome(str) {
var newStr= str.replace(/[^0-9a-z]/gi, '').toLowerCase().split("");
for(var i=0; i < (newStr.length)/2; i++){
if(newStr[i] !== newStr[newStr.length-i-1]){
return false;
}
}
return true;
}
这将是正确的代码。