【发布时间】:2018-08-28 15:37:10
【问题描述】:
我正在尝试找到最长的回文。我有两个从字符串的第一个字母开始的指针。对于外循环中的每个字母,我遍历内循环中的所有其他字母并使用子字符串,即起始字母(外循环)和结束字母(内循环)之间的差异。我反转这个子字符串并检查反转的版本是否与原始版本相同。有了这个,我知道我找到了一个回文。这个算法适用于我的大多数测试用例,除了一个,我不知道为什么。
function longestPalindrome (str) {
const string = str.toLowerCase();
if (str.length < 2) return null;
let palindrome = '';
function stringReverser (start, end) {
const reversed = string.substr(start, end).split('').reverse().join('');
return reversed;
}
for (let i = 0; i <= string.length; i++) {
for (let j = i; j <= string.length; j++) {
if (string.substr(i, j) === stringReverser(i, j)) {
if (string.substr(i,j).length > palindrome.length) {
palindrome = string.substr(i,j);
}
}
}
}
if (!palindrome) return null;
return palindrome;
}
let result1 = longestPalindrome('My mom is called annnna')
let result2 = longestPalindrome('My dad is a racecar athelete')
let result3 = longestPalindrome('That trip with a kayak was quite an adventure!')
console.log(result1)
console.log(result2)
console.log(result3)// should return ' kayak ' but returns 't t' instead.
【问题讨论】:
-
只是一个兴趣点 ..
string.substr(i,j).length真的吗?不就是j吗? -
您可能希望使用
substring方法而不是substr。前者的第二个参数是结束索引,看起来就像你的j应该是什么,而后者是在起始索引之后要拉的字符数。如果您进行更改,您的代码将按原样运行,并为第三次测试返回" kayak "。 -
@JaromandaX 这是
<= j -
哦,是的,j 循环的逻辑完全是垃圾,不是吗
-
为什么选择@KimHogeling?那么
a racecar a将不被考虑......并且a man a plan a canal panama将找不到回文
标签: javascript algorithm