Skip to content

Commit 7b94016

Browse files
author
Kohei Asai
authored
5. Longest Palindromic Substring (axross#121)
1 parent a97f133 commit 7b94016

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed
+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// 5. Longest Palindromic Substring
2+
// https://leetcode.com/problems/longest-palindromic-substring/
3+
export default function longestPalindrome(s: string): string {
4+
let maxPalindromeFrom = 0;
5+
let maxPalindromeTo = 0;
6+
7+
for (let i = 0; i < s.length; ++i) {
8+
const maxRadius = Math.min(s.length - i - 1, i - 0);
9+
let palindromicFrom = i;
10+
let palindromicTo = i + 1;
11+
12+
for (let radius = 1; radius <= maxRadius; ++radius) {
13+
if (s[i - radius] !== s[i + radius]) break;
14+
15+
palindromicFrom -= 1;
16+
palindromicTo += 1;
17+
}
18+
19+
if (palindromicTo - palindromicFrom > maxPalindromeTo - maxPalindromeFrom) {
20+
maxPalindromeFrom = palindromicFrom;
21+
maxPalindromeTo = palindromicTo;
22+
}
23+
24+
if (s[i + 1] && s[i + 1] === s[i]) {
25+
const maxRadius = Math.min(s.length - i - 2, i - 0);
26+
let palindromicFrom = i;
27+
let palindromicTo = i + 2;
28+
29+
for (let radius = 1; radius <= maxRadius; ++radius) {
30+
if (s[i - radius] !== s[i + 1 + radius]) break;
31+
32+
palindromicFrom -= 1;
33+
palindromicTo += 1;
34+
}
35+
36+
if (
37+
palindromicTo - palindromicFrom >
38+
maxPalindromeTo - maxPalindromeFrom
39+
) {
40+
maxPalindromeFrom = palindromicFrom;
41+
maxPalindromeTo = palindromicTo;
42+
}
43+
}
44+
}
45+
46+
return s.substring(maxPalindromeFrom, maxPalindromeTo);
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { test } from "https://deno.land/std/testing/mod.ts";
2+
import { assert } from "https://deno.land/std/testing/asserts.ts";
3+
import longestPalindrome from "./longest_palindromic_substring.ts";
4+
5+
test("5. Longest Palindromic Substring", () => {
6+
assert(["bab", "aba"].includes(longestPalindrome("babad")));
7+
assert(longestPalindrome("cbbd") === "bb");
8+
});

0 commit comments

Comments
 (0)