Skip to content

Commit 968467c

Browse files
committed
Improve the palindrome solution (way better now!)
1 parent 42b70ba commit 968467c

File tree

1 file changed

+23
-18
lines changed

1 file changed

+23
-18
lines changed
Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,29 @@
1-
module.exports = function (str) {
2-
var palindromes = [];
1+
function isPalindrome (str) {
2+
const mid = Math.floor(str.length / 2)
33

4-
var walkPalindrome = function (result, str, leftIndex, rightIndex) {
5-
while (str[leftIndex - 1] === str[rightIndex + 1]) {
6-
result = str[leftIndex -= 1] + result + str[rightIndex += 1];
4+
for (let i = 0; i < mid; i++) {
5+
if (str[i] !== str[str.length - 1 - i]) {
6+
return false
77
}
8-
palindromes.push(result);
9-
};
8+
}
9+
10+
return true
11+
}
12+
13+
module.exports = function longestPalindrome (str) {
14+
let longest = ''
15+
16+
for (let i = 0; i < str.length; i++) {
17+
let len = str.length
18+
19+
while (len > i && len - i > longest.length) {
20+
const substring = str.substring(i, len--)
1021

11-
for (var i = 0; i < str.length; i++) {
12-
if (str[i] === str[i - 1]) {
13-
walkPalindrome(str[i] + str[i - 1], str, i - 1, i);
14-
} else if (str[i] === str[i + 1]) {
15-
walkPalindrome(str[i] + str[i + 1], str, i, i + 1);
16-
} else if (str[i - 1] === str[i + 1]) {
17-
walkPalindrome(str[i - 1] + str[i] + str[i + 1], str, i - 1, i + 1);
22+
if (isPalindrome(substring)) {
23+
longest = substring
24+
}
1825
}
1926
}
2027

21-
return palindromes.reduce(function (memo, str) {
22-
return str.length > memo.length ? str : memo;
23-
}, '');
24-
};
28+
return longest
29+
}

0 commit comments

Comments
 (0)