回文是单词、短语、数字或其他符号或元素序列,其含义可以以相同的方式向前或向后解释。著名的例子包括“爱情,罗马”、“一个人、一个计划、一条运河:巴拿马”和“尼克松中没有‘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
未定义,但我不明白为什么?
我尝试了您的示例并进行了以下更改,它适用于 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 的一部分——具体的错误消息和环境的一些描述应该有助于解决这个问题。
空间复杂度: 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;
};