我正在使用freeCodeCamp的Palindrome Checker.,我的代码有点混乱,但是除了第九个代码外,它都可以在所有测试中使用。 palindrome("almostomla")
应该返回false
,但是在我的代码中它将返回true
。我认为我的第九个代码有一个小问题,但无法解决。我想知道我在哪里缺少什么。
function palindrome(str) {
let str1 = str.replace(/[^a-zA-Z\d:]/gi, '');
let str2 = str1.replace(/,/gi, '');
let str3 = str2.replace(/\./gi, '');
let str4 = str3.replace(/_/, "-");
let myStr = str4.toLowerCase(); //My string is ready for play
for (let i = 0; i < myStr.length; i++) {
if (myStr[i] != myStr[myStr.length - (i+1)]) { //I think there is a little mistake on this line
return false;
} else {
return true;
}
}
答案 0 :(得分:1)
问题是您只检查字符串的第一个和最后一个字符。只有在所有迭代完成后,您才应该return true
:
function palindrome(str) {
let str1 = str.replace(/[^a-zA-Z\d:]/gi, '');
let str2 = str1.replace(/,/gi, '');
let str3 = str2.replace(/\./gi, '');
let str4 = str3.replace(/_/, "-");
let myStr = str4.toLowerCase(); //My string is ready for play
for (let i = 0; i < myStr.length; i++) {
if (myStr[i] != myStr[myStr.length - (i + 1)]) {
return false;
}
}
return true;
}
console.log(palindrome("almostomla"));
console.log(palindrome("foof"));
console.log(palindrome("fobof"));
console.log(palindrome("fobbf"));
请注意,您的初始正则表达式已足够-它将删除所有不是字母,数字或:
的字符,因此稍后运行的其他3个正则表达式是多余的。由于您使用的是i
标志,因此您还可以从正则表达式中删除A-Z
:
const stringToTest = str.replace(/[^a-z\d:]/gi, '');
仅.reverse()
字符串也可能会更容易:
function palindrome(str) {
const strToTest = str.replace(/[^a-z\d:]/gi, '');
return strToTest.split('').reverse().join('') === strToTest;
}
console.log(palindrome("almostomla"));
console.log(palindrome("foof"));
console.log(palindrome("fobof"));
console.log(palindrome("fobbf"));