好吧,所以回文是一个向后拼写的单词。如果我们想要采用同样相反的短语怎么办?所以kook
就是一个。 race car
是另一个。
所以我做了一个不占空间的。
function isPal(string){
var l = string.length;
for (var i = 0; i < (l/2); ++i) {
if (string.charAt(i) != string.charAt(l - i - 1)){
return false;
}
}
return true;
}
这个适用于单词。
现在我正在思考,将字符串推入数组,然后将每个字符拆分为自己的字符串,然后删除任何空格,然后运行if (string.charAt(i) != string.charAt(string.length - i - 1))
。所以这就是我写的但却失败了......
function isPalindrome(string){
var arr = [];
arr.push(string.split(''));
for (i = 0; i < arr.length; i++){
if (arr[i] === ' '){
arr.splice(i, 1);
如果我返回arr
,它仍会给我带有空格的字符串。我该如何做到这一点?谢谢!
编辑:使用了解决方案,但在赛车上仍然是假的。 这就是我得到的:
function isPalindrome(string){
var arr = string.split('');
for (i = 0; i < arr.length; i++){
if (arr[i] === ' '){
arr.splice(i, 1);
} else if (arr[i] != arr[arr.length - i - 1]){
return false;
}
}
return true;
}
我的错误在哪里?
答案 0 :(得分:1)
只需检查没有空格的字符串:
function isPal(string){
string = string.split(" ").join(""); // remove all spaces
var l = string.length;
for (var i = 0; i < (l/2); ++i) {
if (string.charAt(i) != string.charAt(l - i - 1)){
return false;
}
}
return true;
}
isPal("a man a plan a canal panama"); // true
答案 1 :(得分:1)
分裂成数组,反向并再次连接以检查单词是否为回文似乎要容易得多。如果要忽略空格,只需删除所有空格实例:
as_data_frame
或非es6:
let word = 'race car';
let isPalindrome = (word) => {
let nospaces = word.replace(/\s/g, '');
return [...nospaces].reverse().join('') === nospaces;
}
答案 2 :(得分:1)
您的问题在以下一行:
arr.push(string.split(''));
string.split(&#39;&#39;)返回一个数组。因此,arr实际上是一个数组,其中包含一个条目(另一个包含您的字符的数组)。替换:
var arr = [];
arr.push(string.split(''));
与
var arr = string.split('');
它应该按预期工作