【问题标题】:I need to write difficult palindrome我需要写困难的回文
【发布时间】:2021-04-08 14:34:08
【问题描述】:

这是我的例子。给出了字符串。实现一个函数 - detectPalindrom,可以检测回文字符串。

  • 给定参数不是字符串 - 返回“传递的参数不是字符串”。
  • 给定字符串为空 - 返回“字符串为空”。
  • 给定字符串回文 - 返回“此字符串是回文!”。
  • 给定字符串不是回文 - 返回“此字符串不是回文!”

我写了一个解决方案,但它工作不正确:

 const detectPalindrome = (str) => {
    const palindr = str.split('').reverse().join('')

    if(str === '') {
      return 'String is empty'
  } 
    if (str === palindr) {
       return 'This string is palindrome!'
   } 
    if (str !== palindr) {
       return 'This string is not a palindrome!'
   }
}

【问题讨论】:

  • 示例:detectPalindrom(true) // "传递的参数不是字符串" - detectPalindrom('') // "字符串为空" - detectPalindrom("TARARAT") // '这个字符串是回文! - detectPalindrom("I can fly ylf nac i") // '这个字符串是回文!' - detectPalindrom("testtest") // '这个字符串不是回文!'
  • 为什么说“它工作不正常”?你能举个例子吗?我试过了,它似乎工作正常
  • 只写console.log(detectPalindrome(154)),你看到JS说,TypeError
  • 您的代码不会检查参数是否不是字符串,根据您上面写的内容,这是它应该做的事情之一。
  • 我不明白该怎么做

标签: javascript string function numbers palindrome


【解决方案1】:

只需在创建palindr 字符串之前进行检查即可。

const detectPalindrome = (str) => {
  if (typeof str !== "string") {
    return 'Passed argument is not a string'
  }
  
  const palindr = str.split('').reverse().join('');

  if (str === '') {
    return 'String is empty';
  }
  if (str === palindr) {
    return 'This string is palindrome!';
  }
  if (str !== palindr) {
    return 'This string is not a palindrome!';
  }
};

detectPalindrome("154");

【讨论】:

  • 但是它不会做需要的事情,即:Given argument not an string - return 'Passed argument is not a string'。
  • @Jesper 谢谢!我错过了,因为 OP 的代码中没有。我的错,我已经更新了我的答案。
  • 我几个月没写代码,所以我忘记了一些JS属性谢谢帮助
  • 我看到你接受了这个答案,然后接受了其他答案。我能知道为什么吗? @MishaYanenko
  • 我看到两个类似的答案,如果你想我检查你的答案
【解决方案2】:

这应该接受字符串和数字,根据您的需要重构和即兴创作。这只是基本的操作。

        const detectPalindrome = input => {
        if (typeof input === 'string') {
            if(input === '') {
                return 'String is empty'
            }
            if (typeof input === 'string') {
                const palindr = input.split('').reverse().join('');
                if(input === palindr)
                {
                    console.log('This string is palindrome!');
                }
            }
    
        }
        else if(typeof input === 'number')
        {
            checkPalinForNumber(input)
        }
        else{
            console.log("no match");
        }
    
    }
    
function checkPalinForNumber(number)
{
    var temp = number;
    while(number>0)
    {
        var rem = number%10;
        number = parseInt(number/10);
        var final = final*10+rem;
    }
    if(final==temp)
    {
        console.log("number is Palindrome");
    }
    else
    {
        console.log("number is not palindrome");
    }

}
        detectPalindrome(123);
        detectPalindrome("aba")

【讨论】:

    【解决方案3】:

    您需要通过仅保留非空白字符来转义您的输入。您也可以对其进行细化以去除特殊字符。

    const
      reverse = str => str.split('').reverse().join(''),
      escape = str => str.toLowerCase().replace(/[^\S]|[,;\.?!'"]/g, '');
    
    const detectPalindrome = input => {
      if (typeof input === 'string') {
        if (input === '') return 'String is empty'
        const
          str = escape(input),
          pal = reverse(str);
        return str === pal
          ? 'This string is a palindrome!'
          : 'This string is not a palindrome!';
      } else {
        return 'Passed argument is not a string';
      }
    }
    
    console.log(detectPalindrome(0));         // 'Passed argument is not a string'
    console.log(detectPalindrome(''));        // 'String is empty'
    console.log(detectPalindrome('Racecar')); // 'This string is a palindrome!'
    console.log(detectPalindrome('Apple'));   // 'This string is not a palindrome!'
    
    console.log(detectPalindrome("Madam I'm Adam")); // TRUE

    【讨论】:

    • 要求并没有说明只需要保留非空白字符并去除特殊字符。
    • @Jesper 专有名词在你的场景中不起作用。
    • 好吧,也许他们不应该这样做,因为上述问题中所述的要求并没有说明这一点。
    【解决方案4】:

    const detectPalindrome = (str) => {
    
      if (typeof str !== 'string')
        return 'Passed argument is not a string'
    
      const palindr = str.split('').reverse().join('')
    
      if (str === '') {
        return 'String is empty'
      }
      if (str === palindr) {
        return 'This string is palindrome!'
      }
      if (str !== palindr) {
        return 'This string is not a palindrome!'
      }
    }
    
    console.log(detectPalindrome(123))
    console.log(detectPalindrome(""))
    console.log(detectPalindrome("abcd"))
    console.log(detectPalindrome("lol"))

    【讨论】:

      【解决方案5】:

      您也可以检查输入是否为字符串,您的解决方案不适用于哪些示例?或者你可以使用类似的东西:

      String(str)
      

      将您的输入转换为字符串

      【讨论】:

      • 将输入转换为特定类型和检查输入是否为特定类型是两种截然不同的动物。
      • 你说得对,我给出了两个不同的选项:)
      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2011-08-18
      • 2012-03-10
      • 1970-01-01
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多