回文索引HackerRank JS



我目前正在尝试解决HackerRank回文索引挑战。https://www.hackerrank.com/challenges/palindrome-index/problem

我的函数似乎返回"undefined"而不是解决方案(应该为字符串更改索引以成为回文)。为什么?

function palindromeIndex(s) {
// Write your code here
const reverse = (string) => s.split("").reverse().join("");
var reversed = reverse(s);
if (reversed === s) {
return -1;
} else {
for (let i = 0; i < s.length; i++) {
// splice the array to remove index i and then compare 
let myArray = s.split("");
if ((myArray.splice(i, 1).join("")) === reverse(myArray.splice(i, 1).join(""))) {
return i;
} 
} ;
}
}
console.log(palindromeIndex("racezcar"));

  1. 您的reverse函数始终对该函数的相同输入参数s进行操作,因为反向函数的局部参数将称为string。因此,无论何时调用reverse(something),您都将获得反向的原始输入。

  2. 你似乎对Array.splice的工作原理有误解。

    • 它在地方工作ie修改你在
    • 上调用它的数组
    • 它返回删除的元素而不是修改后的数组

    在您的情况下,似乎更容易使用substr而不是splice…

function palindromeIndex(s) {
// Write your code here
const reverse = (string) => string.split("").reverse().join("");
if (s === reverse(s)) {
return -1;
} else {
for (let i = 0; i < s.length; i++) {
let spliced = s.substr(0, i) + s.substr(i+1);
if (spliced === reverse(spliced))
return i;
}
}
//return whatever specified, when the input can't be
//converted into a palindrome ... 
}
console.log(palindromeIndex("racezcar"));
console.log(palindromeIndex("racezcars"));

当无法将输入转换为回文时,此代码仍然返回undefined

您的函数返回undefined的原因是由于您的reverse函数。有一个小错误,你调用s而不是string:

const reverse = (string) => s.split("").reverse().join("");

应改为:

const reverse = (string) => string.split("").reverse().join("");

否则,您仍然需要做一些工作才能使其按预期工作。

最新更新