带JavaScript的回文索引Hackerrank
我为HackerRank上的回文索引挑战提交了以下代码,但它在一些测试用例中失败,错误超过了时间限制。我不确定我的代码出了什么问题 基本上,我实现了一个独特的“helper”函数来检查字符串是否是回文。在带JavaScript的回文索引Hackerrank,javascript,Javascript,我为HackerRank上的回文索引挑战提交了以下代码,但它在一些测试用例中失败,错误超过了时间限制。我不确定我的代码出了什么问题 基本上,我实现了一个独特的“helper”函数来检查字符串是否是回文。在回文索引函数中,我首先检查一个字符串是否为回文,然后返回-1,否则我将遍历该字符串,尝试删除每个字母,以查看剩余的字符串是否为回文 如果是,请在此处返回索引;否则,继续 如果循环结束时没有返回任何索引,这意味着没有结果,我将返回-1 这就是我试图做的,但我无法在这里找到问题所在。谢谢 funct
回文索引
函数中,我首先检查一个字符串是否为回文,然后返回-1
,否则我将遍历该字符串,尝试删除每个字母,以查看剩余的字符串是否为回文
如果是,请在此处返回索引;否则,继续
如果循环结束时没有返回任何索引,这意味着没有结果,我将返回-1
这就是我试图做的,但我无法在这里找到问题所在。谢谢
function isPalindrome(s) {
for (let i = 0; i < s.length; i++) {
if (s[i] !== s[s.length - 1 - i]) {
return false;
}
}
return true;
}
function palindromeIndex(s) {
let result = isPalindrome(s);
if (result) {
return -1;
}
else {
for (let i = 0; i < s.length; i++) {
let newS = s.slice(0,i) + s.slice(i+1);
if (isPalindrome(newS)) {
return i;
}
}
return -1
}
}
函数isAlindrome(s){
for(设i=0;i
您需要优化回文函数。只需将循环从0
运行到数组的一半
function isPalindrome(s) {
for (let i = 0; i < s.length/2; i++) {
if (s[i] !== s[s.length - 1 - i]) {
return false;
}
}
return true;
}
函数isAlindrome(s){
for(设i=0;i
…否则我将遍历字符串,尝试删除每个字母
查看剩余字符串是否为回文
这就是问题所在。无需再次循环遍历整个字符串,因为一旦在字符串中找到一对断开回文的字母-答案必须是该对中第一个字母或第二个字母的索引,或者-如果删除两个字母不会产生回文-则返回-1
函数回文索引{
函数isAlindrome(s){
对于(设i=0;i console.log(回文索引('baaabcc'))
我将只是起草基本想法,因为我想你想自己尝试一下:
aaa = -1
aaab = 3
baaa = 0
bbaa = -1
You only want to loop through the string once.
You only need to loop through half the string, and do comparisons.
我只会专注于移动索引
字符串:baaa
默认变量:职位:-1
起始值:0
endNudge:0 在索引i处(从0开始):
- 检查
+startNudge与i
+endNudgestring.length-1-i
- 如果不相等:
- 检查索引
+startNudge与i+1
+endNudge。string.length-1-i
- 如果相等,则将位置设置为
,并将startNudge设置为1i
- 如果相等,则将位置设置为
- 否则,根据
+endNudge检查string.length-2-i
+startNudge。i
- 如果相等,则将位置设置为
并将endNudge设置为-1string.length-1-i
- 如果相等,则将位置设置为
- 否则通过返回-1来中断循环
- 如果位置已保存,则通过返回-1中断循环
- 检查索引
- 继续循环
如果循环完成,返回位置。正确,但速度太慢。他们想让你找到一个更好的算法,所以他们加入了一些测试用例,这些测试用例不会在合理的时间内使用一个幼稚的算法完成。那么我该如何改进我的算法呢?我将其从0改为循环到s.length/2,但仍然不起作用,同样的错误。另外,我认为在复杂性分析方面,n和1/2*n是相同的,所以我不认为这是问题所在?你还有别的想法吗(@ChrisLe你能给我问题的链接,这样我就可以自己试试吗?@ChrisLe你可能需要一个不同的算法,用
O(N)
代替O(N^2)。我想问题也出在O(N^2)上,但不知道如何将复杂性降低到O(N):(它现在起作用了!我终于明白你的解决方案了!非常感谢@Danield