学习JS /编程并运行一些基本练习。
这是确定一个单词是否为回文(向前读取与向后相同)。
我的问题是,即使输入回文,函数也会返回false
。从踩过来看,似乎string[i
]给出了一个比较整数,而不是当前索引的字符。
let input = "hannah";
let firstCharacter = input[0];
let lastIndex = input.length -1;
let lastCharacter = input[lastIndex];
function palTest(string) {
let j = string[lastIndex];
if (string.length % 2 === 0 )
{
for (i = 0; i <= string.length / 2; i++) {
if (string[i] === string[j]) {
j--;
return true;
} else {
return false;
}
}
} else {
let middleCharacter = (string.length + 1) / 2;
for (i = 0; i <= ((string.length + 1) / 2) - 1; i++) {
if (string[i] === string[j] && middleCharacter == "a" || "e" || "i" || "o" || "u" ) {
j--;
return true;
} else {
return false;
}
}
}
}
let x = palTest(input);
console.log(x); // false
console.log(input[0]); // h
console.log(input[1]); // a
console.log(input[2]); // n
console.log(input[3]); // n
console.log(input[4]); // a
console.log(input[5]); // h
在第一个循环的for
循环中,我认为hannah[i]
代替0
而不是"h"
:所以它将0
与{{"h"
进行比较1}}(hannah[j]
)并返回false?
答案 0 :(得分:1)
一些想法:
false
,true
,因为该字符串是回文。
function palTest(string) {
var i, l;
for (i = 0, l = Math.floor(string.length / 2); i < l; i++) {
if (string[i] !== string[string.length - 1 - i]) {
return false;
}
}
return true;
}
console.log(palTest('hannah'));
console.log(palTest('foo'));
BTW,用这种模式检查,
middleCharacter == "a" || "e" || "i" || "o" || "u"
仅检查带有比较的第一部分,如果不是true
,则将下一个字符串"e"
视为truthy值作为条件的返回值。
根本没有真正的检查。
答案 1 :(得分:1)
您需要减去lastIndex而不是最后一个索引的值
var input = "hannah";
var fnCheckPal = ( input ) => input == input.split( "" ).reverse().join("");
一个不太详细的方法可能是
var fnCheckPal = (input) => input == input.split("").reverse().join("");
console.log( fnCheckPal( "hannah" ) );
console.log( fnCheckPal( "hantnah" ) );
console.log( fnCheckPal( "hann33ah" ) );
<强>演示强>
{{1}}
答案 2 :(得分:1)
我建议稍微简化你的逻辑,因为你只需要一个循环,一个变量而没有全局存储的东西。只需循环一次,检查当前索引是否等于最终的相同索引,如果不是,则它不是回文。偶数或不均匀的字母数量甚至不会产生影响:
function testPalindrome( string ){
for( let i = 0; i < string.length / 2; i++ ){
if( string[ i ] !== string[ string.length - 1 - i ] ){
return false;
};
}
return true;
}
console.log( testPalindrome( 'hannah' ) ); // true
console.log( testPalindrome( 'aba' ) ); // true
console.log( testPalindrome( 'stackoverflow' ) ); // false
&#13;