有人能够善意地告诉我为什么“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;
}
}
}
}
感谢所有答案。
答案 0 :(得分:3)
虽然如果你把时间投入其中,我可以理解想要让某些东西发挥作用的挫折感,但是从绘图板开始并没有让自己疯狂的事情也有可说。我看到你的代码的主要问题是当你只需要一个时你有两个循环。第二个循环实际上正在破坏你。我建议运行一个调试器(键入&#34;调试器&#34;进入你的代码并运行)以查看原因。
我相信这是你想要完成的事情:
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;
}
通过这种方式,您将比较字符串中的每个镜像元素,以确认该字符串是否为回文结构。
答案 1 :(得分:2)
现在似乎已经回答了你的问题。
如果性能不是问题,为什么不使用它?
function palindrome(str) {
str = str.toLowerCase();
return (str.split().reverse().join() === str)
}
它将字符串拆分为一个数组,将其反转并将其连接在一起。结果与原始字符串进行比较。
答案 2 :(得分:1)
你只能知道它在每次迭代中是不是回文。
另外,为什么要使用嵌套循环?
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;
}
答案 3 :(得分:0)
这有效:
function palindrome(string) {
string = string.toLowerCase();
for (var i = 0; i < Math.ceil(str.length/2); i++) {
var character1 = string.charAt(i);
var character2 = string.charAt(string.length-1-i);
if (character1 !== character2) {
return false;
}
}
return true;
}
答案 4 :(得分:0)
这是一个省略空格和逗号的版本:
var removeLetterFromString = function(string,letterPos){
var returnString = "";
for(var i = 0; i < string.length; i++){
if(i!==letterPos){
returnString=returnString+string.charAt(i);
}
}
return returnString;
};
var palindrome = function(string) {
string = string.toLowerCase();
var stringCheck="";
var recheck = true;
while(recheck){
recheck=false;
for(var i = 0; i < string.length; i ++){
if(string.charAt(i)===" "||string.charAt(i)===","){
string=removeLetterFromString(string,i);
}
}
for(var i = 0; i < string.length; i ++){
if(string.charAt(i)===" "||string.charAt(i)===","){
recheck=true;
}
}
}
if(string.length===0){
return false;
}
for (var i = 0; i < Math.ceil(string.length/2); i++) {
var j = string.length-1-i;
var character1 = string.charAt(i);
var character2 = string.charAt(j);
if (character1 !== character2) {
return false;
}
}
return true;
};