回文检查器需要帮助

时间:2019-06-23 21:44:18

标签: javascript

我正在使用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;
            }
        }

1 个答案:

答案 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"));