尝试创建一个能够解释空格的回文函数

Trying to create a palindrome function that accounts for spaces

本文关键字:解释 空格 函数 回文 一个 创建      更新时间:2023-09-26

好的,回文是一个单词,是相同的拼写反向。如果我们想把一个同样的短语反过来看呢?所以kook是1。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;
}

我的错误在哪里?

您的问题在以下行:

arr.push(string.split(''));

string.split(")返回一个数组。因此,arr实际上是一个包含一个条目的数组(另一个包含字符的数组)。替换:

var arr = [];
arr.push(string.split(''));

var arr = string.split('');

应该能正常工作

检查不带空格的字符串:

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

似乎更容易分割成一个数组,反向并再次连接,以检查一个单词是否是回文。如果您想忽略空格,只需删除所有的空格实例:

let word = 'race car';
let isPalindrome = (word) => {
   let nospaces = word.replace(/'s/g, '');
   return [...nospaces].reverse().join('') === nospaces;
}

或non-es6:

var word = 'race car';
var isPalindrome = function(word) {
   var nospaces = word.replace(/'s/g, '');
   return nospaces.split('').reverse().join('') === nospaces;
}