我在回文函数方面遇到问题。 这是我的职责:
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”,这是不正确的。为什么会这样?
首先,您在循环内使用 return 语句,该语句在仅检查数组的第一个和最后一个元素后执行,然后函数返回 true 或 false,这是错误的。
另外,请注意:almostomla 和 amariorama 不是回文 使用reverse()方法很容易检查回文,如下所示:
function palindrome(s) {
var reverseString = s.split("").reverse().join("");
if(s==reverseString)
console.log("palindrome");
else
console.log("not palindrome");
}
palindrome("almostomla");
您的代码失败,因为您在循环的第一次迭代时返回。您应该仅在最后返回 - 或者如果检查失败您可以立即返回。
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;
}
回文是一个单词、短语、数字或其他字符序列,其向后读与向前读相同,例如“女士”或“赛车”。当允许调整大写字母、标点符号和分词符时,可以编写句子长度的回文,例如“一个人,一个计划,一条运河,巴拿马!”,“我看到的是一辆汽车还是一只猫? ”或“尼克松中没有‘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;
}
这将是正确的代码。
function palindrome(x) {
let words = [];
let truth = [];
for (i=0; i<100; i++) {
if (x.length == 0 || x.length == 1) {
truth.push(1);
words.push(x);
break;
} else if (x.slice(0,1) == x.slice(x.length-1)) {
truth.push(1);
words.push(x);
newWord = x.slice(1,x.length-1);
x = newWord;
} else {
truth.push(0);
words.push(x);
break;
}
} if (truth.includes(0)) {
document.write(words[0] +" " +"is NOT a Palindrome");}
else
{
document.write(words[0] +" " +"is a Palindrome");
}
}
palindrome("inputword");