|
1 |
| -module.exports = function (str) { |
2 |
| - var palindromes = []; |
| 1 | +function isPalindrome (str) { |
| 2 | + const mid = Math.floor(str.length / 2) |
3 | 3 |
|
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 |
7 | 7 | }
|
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--) |
10 | 21 |
|
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 | + } |
18 | 25 | }
|
19 | 26 | }
|
20 | 27 |
|
21 |
| - return palindromes.reduce(function (memo, str) { |
22 |
| - return str.length > memo.length ? str : memo; |
23 |
| - }, ''); |
24 |
| -}; |
| 28 | + return longest |
| 29 | +} |
0 commit comments