试图创建一个占据空间

时间:2016-10-11 23:09:59

标签: javascript arrays

好吧,所以回文是一个向后拼写的单词。如果我们想要采用同样相反的短语怎么办?所以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;
}

我的错误在哪里?

3 个答案:

答案 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('');

它应该按预期工作