有人能告诉我为什么“almostomla”在我的代码中返回true。
我已经搜索并看到有更简单的版本,但是我现在对这段代码如此深入,如果可能的话,我需要让它工作。请原谅可怕的变量名,我很沮丧。
function palindrome(str) {
str = str.toLowerCase();
str = str.replace(/ /g, '').replace(/\./g, '').replace(/,/g, '');
for (var i = 0; i < str.length / 2; i++) {
for (var j = str.length - 1; j > str.length / 2 - 1; j--) {
var iDntKnow = str.charAt(i);
var iDntKnowEither = str.charAt(j);
if (iDntKnow === iDntKnowEither) {
return true;
} else {
return false;
}
}
}
}
感谢所有的答案。
虽然我能理解如果你投入了时间,想要让某件事发挥作用的挫败感,但从绘图板开始,不要让自己发疯,也有一些话要说。我看到你的代码的主要问题是,当你只需要一个循环时,你有两个循环。第二个循环实际上是在破坏你。我建议运行一个调试器(在你的代码中输入“调试器”并运行),看看为什么。
我相信这就是你正在努力实现的目标:
var palindrome = function(str) {
// Put any additional string preprocessing here.
for(var i = 0; i < str.length/2; i++) {
var j = str.length-i-1;
if (str[i] != str[j]) {
return false;
}
}
return true;
}
通过这种方式,您可以比较字符串中的每个镜像元素以确认字符串是否是回文。
你的问题现在似乎得到了回答。
如果性能不是问题,为什么不直接使用它呢?
function palindrome(str) {
str = str.toLowerCase();
return (str.split().reverse().join() === str)
}
它将字符串拆分为一个数组,反转并将其重新连接在一起。结果与原始字符串进行比较。
你只能知道它在每次迭代中是否不是回文。
另外,为什么要使用嵌套循环?
function palindrome(str) {
str = str.toLowerCase();
str = str.replace(/ /g, '').replace(/\./g, '').replace(/,/g, '');
for (var i = 0; i < str.length / 2; i++) {
if (str.charAt(i) !== str.charAt(str.length - i - 1)) {
return false;
}
}
return true;
}