-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathlongest_palindromic_substring.ts
47 lines (38 loc) · 1.31 KB
/
longest_palindromic_substring.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 5. Longest Palindromic Substring
// https://leetcode.com/problems/longest-palindromic-substring/
export default function longestPalindrome(s: string): string {
let maxPalindromeFrom = 0;
let maxPalindromeTo = 0;
for (let i = 0; i < s.length; ++i) {
const maxRadius = Math.min(s.length - i - 1, i - 0);
let palindromicFrom = i;
let palindromicTo = i + 1;
for (let radius = 1; radius <= maxRadius; ++radius) {
if (s[i - radius] !== s[i + radius]) break;
palindromicFrom -= 1;
palindromicTo += 1;
}
if (palindromicTo - palindromicFrom > maxPalindromeTo - maxPalindromeFrom) {
maxPalindromeFrom = palindromicFrom;
maxPalindromeTo = palindromicTo;
}
if (s[i + 1] && s[i + 1] === s[i]) {
const maxRadius = Math.min(s.length - i - 2, i - 0);
let palindromicFrom = i;
let palindromicTo = i + 2;
for (let radius = 1; radius <= maxRadius; ++radius) {
if (s[i - radius] !== s[i + 1 + radius]) break;
palindromicFrom -= 1;
palindromicTo += 1;
}
if (
palindromicTo - palindromicFrom >
maxPalindromeTo - maxPalindromeFrom
) {
maxPalindromeFrom = palindromicFrom;
maxPalindromeTo = palindromicTo;
}
}
}
return s.substring(maxPalindromeFrom, maxPalindromeTo);
}