确定给定字符串是否是有效的回文。 JS

问题描述 投票:0回答:2

回文是单词、短语、数字或其他符号或元素序列,其含义可以以相同的方式向前或向后解释。著名的例子包括“爱情,罗马”、“一个人、一个计划、一条运河:巴拿马”和“尼克松中没有‘x’”。 - 维基百科

我们的目标是确定给定的字符串是否是有效的回文。

测试用例:

Test.assertEquals(palindrome("Amore, Roma"), true)
Test.assertEquals(palindrome("A man, a plan, a canal: Panama"), true)
Test.assertEquals(palindrome("No 'x' in 'Nixon'"), true)
Test.assertEquals(palindrome("Abba Zabba, you're my only friend"), false)

到目前为止我的代码:

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

    if (string == rev) {
        return true; 
    } else {
        return false;
    }
}

显然

join
未定义,但我不明白为什么?

javascript palindrome
2个回答
0
投票

我尝试了您的示例并进行了以下更改,它适用于 OSX 10.9:

function palindrome(string) {
    var str = string.toLowerCase().replace(/[^a-z]/g, "");

    var rev = str.split("").reverse().join("");

    return (str == rev);
}

从 1.1 版本开始,数组 join() 方法似乎已经成为 Javascript 的一部分——具体的错误消息和环境的一些描述应该有助于解决这个问题。


0
投票

空间复杂度: O(1)

let isPalindrome = function(s) {

    s = s.toLowerCase().replace(/[\W_]/g, '');
    let left = 0;
    let right = s.length - 1;

    while(left < right) {
        if(s[left] != s[right]) return false;

        left++;
        right--;
    }
    return true;
};
© www.soinside.com 2019 - 2024. All rights reserved.