【问题标题】:Check if a String is a Palindrome in JavaScript在 JavaScript 中检查字符串是否为回文
【发布时间】:2015-06-27 16:34:14
【问题描述】:

此任务的要求是代码为输入字符串返回“真”或“假”。字符串可以是简单的单词或短语。另一个问题没有解决这些需求。请重新打开并在这里回答。我正在研究一个函数来检查给定的字符串是否是回文。我的代码似乎适用于简单的单字回文,但不适用于具有大写字母或空格的回文。

function palindrome(str) 
{
    var palin = str.split("").reverse().join("");

    if (palin === str){
        return true;
    } else {
        return false;
    }
}   

palindrome("eye");//Succeeds
palindrome("Race car");//Fails

【问题讨论】:

  • 该问题是询问如何生成回文,而不是根据上述标准检查两个字符串是否为回文。如果我们可以重新打开它,我会将其发布为答案:function isPalindrome(str) { str = str.replace(/\s/g, '').toLowerCase(); return str === str.split('').reverse().join(''); }
  • @AlexanderO'Mara 你在这里是正确的。我需要帮助了解如何在 javascript 中使用正则表达式并在此处使用它们来删除空格和任何标点符号以及任何大写字母。我希望他们能重新提出这个问题,因为另一个问题肯定是不同的。
  • @jfriend00 你能重新打开这个吗?不是重复的
  • 为了处理标点符号,您只能保留类似工作的字符。 function isPalindrome(str) { str = str.replace(/\W/g, '').toLowerCase(); return str === str.split('').reverse().join(''); }
  • 好的,完美。非常感谢@AlexanderO'Mara!两个简单的问题:1) '/' 是否开始和结束正则表达式? 2) '\W' 是否会一次性处理空格和标点符号,因为它们都是非工作字符?

标签: javascript arrays


【解决方案1】:

首先将字符串转换为小写。此外,不属于字母的字符也会被删除。所以字符串比较变成了一个数组,然后取反,再转成字符串。

Step 1: str1.toLowerCase().replace(...) => "Race car" => "race car" => "racecar"
Step 2: str2.split("") => ["r","a","c","e","c","a","r"] => .reverse().join() => "racecar"
Result: str1 === str2

function palindrome(str) {
   str = str.toLowerCase().replace(/[^a-z]+/g,"");
   return str === str.split("").reverse().join("")
}

alert(palindrome("eye")); //true
alert(palindrome("Race car")); //true
alert(palindrome("Madam, I'm Adam")); //true

【讨论】:

  • 这将与空格、大写和标点符号有相同的问题
  • @AustinHansen 更新,现在所有空格都被替换,所有字符现在都是小写以避免出现问题
【解决方案2】:

类似if (word === word.split('').reverse().join('')) {/*its a palindrome!*/} 我会说

isPalindrome 字符串扩展:

String.prototype.isPalindrome = function () {
  var cleaned = this.toLowerCase().match(/[a-z]/gi).reverse();
  return cleaned.join('') === cleaned.reverse().join('');
}

var result = document.querySelector('#result');
result.textContent = "'eye'.isPalindrome() => " + 'eye'.isPalindrome() +
                     "\n'Something'.isPalindrome() => " + 'Something'.isPalindrome() +
                     "\n'Race Car'.isPalindrome() => " + 'Race Car'.isPalindrome() +
                     "\n'Are we not drawn onward, we few, drawn onward to new era?'.isPalindrome() => " + 
                        'Are we not drawn onward, we few, drawn onward to new era?'.isPalindrome() +
                     "\n'Never even or odd'.isPalindrome() => " + 'Never even or odd'.isPalindrome() +
                     "\n'Never odd or even'.isPalindrome() => " + 'Never odd or even'.isPalindrome();
;
<pre id="result"></pre>

【讨论】:

    【解决方案3】:
    function palindrome(str) {
        let letters = str.split('').filter(function (str) {
            return /\S/.test(str);
        });
        let reversedLetters = str.split('').reverse().filter(function (str) {
            return /\S/.test(str);
        });
    
        for (let i = 0; i < letters.length; i++) {
            if (letters[i].toLowerCase() !== reversedLetters[i].toLowerCase()) {
                return false;
            }
        }
        return true;
    }
    console.log(palindrome("eye")); //true
    console.log(palindrome('Race car')); //true
    

    【讨论】:

      【解决方案4】:
      const palindromes = arrayOfWords.filter((item) => {
          return item === item.split('').reverse().join('');
      })
      

      这是一个例子:-)

      【讨论】:

        【解决方案5】:
        function palindrome(str) {
        
          var st='';    
          st=str.replace(/[^a-z0-9]/ig,"").toLowerCase();    
          var arr=[];    
          arr=st.split('');    
          arr=arr.reverse();    
          var strr='';    
          strr=arr.join('');
          if(strr==st) {
             return true;
         }
         return false;
        }    
        palindrome("A man, a plan, a canal. Panama");//calling the function
        

        【讨论】:

          【解决方案6】:

          //1.将字符串更改为数组 //2。使用反向方法 //3.将数组作为字符串返回 //4. return input= 新的反转字符串

          var lowerCasedString = inputString.toLowerCase(); var reversedString = lowerCasedString.split("").reverse().join(""); return reversedString === lowerCasedString;
          }
          希望这会有所帮助:

          【讨论】:

            【解决方案7】:

            使用 ES6 的回文

            const checkPalindrome=(str)=> {
              return str.toLowerCase().trim() === str.toLowerCase().trim().split('').reverse().join('');
            }
            console.log(checkPalindrome("Level "))

            【讨论】:

              【解决方案8】:

              尽可能简单!

              function checkStrForPalindorme(string) {
                const str = string.toLowerCase().trim();
                const reversedStr = str.split("").reverse().join("");
              
                return str === reversedStr;
              }
              
              console.log(checkStrForPalindorme("aaffaa "))
              console.log(checkStrForPalindorme("dummy"))

              【讨论】:

                【解决方案9】:

                我先创建了一个查找对象,然后分析每个查找项的频率

                如果 str = "PEEPs",那么 查找 = {p:2, e:2, s:1}

                详情请参考以下功能

                function checkPlaindrome(str) {
                  const lookUp = {};
                  // Create the lookUp object
                  for (let char of str.toLowerCase().trim()) {
                    if (char !== " ") lookUp[char] = ++lookUp[char] || 1;
                  }
                  // Analyse the lookup object
                  const singleCharCheck = Object.values(lookUp).filter((val) => val === 1);
                  const findalSingleCharCheck =
                    singleCharCheck.length === 0 || singleCharCheck.length === 1;
                  const noneSingleCharCheck =
                    Object.values(lookUp)
                      .filter((val) => val !== 1)
                      .filter((val) => val % 2 !== 0).length === 0;
                
                  return findalSingleCharCheck && noneSingleCharCheck;
                }
                
                const r = checkPlaindrome("w wPEEPs"); // true
                const r1 = checkPlaindrome("w PEEPs"); // false
                

                【讨论】:

                  猜你喜欢
                  • 2012-04-05
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-11-15
                  • 1970-01-01
                  相关资源
                  最近更新 更多