【问题标题】:How to check for palindrome in a reversed string in javascript如何在javascript中检查反向字符串中的回文
【发布时间】:2017-06-24 15:01:18
【问题描述】:

我需要你的帮助社区,我已经编写了一个代码来反转一个函数,但问题是我无法检查回文,任何帮助将不胜感激。 这是反转字符串的代码

function reverseString(str) {
    return str.split("").reverse().join("");
};

问题是如何检查回文我完全糊涂了。抱歉社区我想针对测试运行它并且它没有正确通过,这就是问题所在。 这是用 jasmine 编写的测试规范。

describe("Produce the reverse order of a word: ", function () {
  describe("Case for en empty string", function() {

    it("should return null for empty string", function() {
      expect(reverseString('')).toEqual(null);
    });

  });

  describe("Case for palindromes", function() {

    it("should return true for `anna`", function() {
      expect(reverseString('anna')).toEqual(true);
    });

    it("should return true for `NaN`", function() {
      expect(reverseString('NaN')).toEqual(true);
    });

    it("should return true for `civic`", function() {
      expect(reverseString('civic')).toEqual(true);
    });

  });

  describe("Case for normal words", function() {

    it("should return `skoob` for `books`", function() {
      expect(reverseString('books')).toEqual('skoob');
    });

    it("should return `nomolos` for `solomon`", function() {
      expect(reverseString('solomon')).toEqual('nomolos');
    });

    it("should return `csim` for `misc`", function() {
      expect(reverseString('misc')).toEqual('csim');
    });

  });

});

这是一个朋友在 ECMA6 中编写的代码,它通过使用单个功能块来工作。我不想使用他的代码,所以我看起来不像抄袭猫,无论如何都违反规则,只想编写自己的代码。虽然我们仍然可以在 ECMA 5 中编写它

这是他的代码

const reverseString = (stringToReverse) => {
    reversedString = "";

    if (stringToReverse) {
        for (i = String(stringToReverse).length; i >= 0; i--) {
            reversedString += stringToReverse[i];
        }
    } else {
        return null;
    }

    if (reversedString.substring(9) === stringToReverse) {
        console.log(true);
        return true;
    }
    return `${reversedString.substring(9)}`;
};

module.exports = reverseString;

【问题讨论】:

  • 您已经在 palindrome 函数中反转字符串。

标签: javascript reverse palindrome


【解决方案1】:

为了能够捕获这样的回文,您还必须删除逗号和点等字符。一种简单的方法是删除非字母数字字符:

function palindrome(str) {
  var re = /[^0-9a-z]/gi;
  var lowRegStr = str.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}
palindrome("A man, a plan, a canal. Panama");

编辑:OP 使用的正则表达式已经很好了。所以这个问题并不是真的必要。无事可做。

【讨论】:

  • 谢谢,但是我如何在单个函数块中反转并检查回文。
  • 编辑:实际上它确实有效。起初,我以为它只是删除空格,但那个正则表达式也很好
  • 阿尔贝托没有通过测试
  • 您应该在前两个测试用例(“空字符串的情况”和“回文的情况”)中使用palindrome 函数,而不是reverseString 函数。但这仍然很奇怪,因为您没有在 palindrome 函数中使用 reverseString,您只是复制了该功能。
  • 现在很困惑,我在想我需要扩展这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多