Skip to content

Commit 983e5c1

Browse files
committed
adding algo
1 parent 5021ce6 commit 983e5c1

3 files changed

Lines changed: 76 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution:
2+
def longestPalindrome(self, s: str) -> str:
3+
start, max_len = 0, 1
4+
5+
def expand(left: int, right: int) -> None:
6+
nonlocal start, max_len
7+
while left >= 0 and right < len(s) and s[left] == s[right]:
8+
left -= 1
9+
right += 1
10+
length = right - left - 1
11+
if length > max_len:
12+
max_len = length
13+
start = left + 1
14+
15+
for i in range(len(s)):
16+
expand(i, i) # odd-length
17+
expand(i, i + 1) # even-length
18+
19+
return s[start:start + max_len]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
function longestPalindrome(s: string): string {
2+
let start = 0, maxLen = 1;
3+
4+
const expand = (left: number, right: number): void => {
5+
while (left >= 0 && right < s.length && s[left] === s[right]) {
6+
left--;
7+
right++;
8+
}
9+
const length = right - left - 1;
10+
if (length > maxLen) {
11+
maxLen = length;
12+
start = left + 1;
13+
}
14+
};
15+
16+
for (let i = 0; i < s.length; i++) {
17+
expand(i, i); // odd-length
18+
expand(i, i + 1); // even-length
19+
}
20+
21+
return s.substring(start, start + maxLen);
22+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import unittest
2+
from src.my_project.interviews.top_150_questions_round_22\
3+
.ex_140_longest_palindromic_substring import Solution
4+
5+
6+
class LongestPalindromicSubstringTestCase(unittest.TestCase):
7+
def setUp(self):
8+
self.solution = Solution()
9+
10+
def test_example_1(self):
11+
result = self.solution.longestPalindrome("babad")
12+
self.assertIn(result, ("bab", "aba"))
13+
14+
def test_example_2(self):
15+
self.assertEqual("bb", self.solution.longestPalindrome("cbbd"))
16+
17+
def test_single_char(self):
18+
self.assertEqual("a", self.solution.longestPalindrome("a"))
19+
20+
def test_all_same(self):
21+
self.assertEqual("aaaa", self.solution.longestPalindrome("aaaa"))
22+
23+
def test_no_palindrome_longer_than_one(self):
24+
result = self.solution.longestPalindrome("abcd")
25+
self.assertEqual(1, len(result))
26+
27+
def test_even_palindrome(self):
28+
self.assertEqual("abba", self.solution.longestPalindrome("cabba"))
29+
30+
def test_full_string_palindrome(self):
31+
self.assertEqual("racecar", self.solution.longestPalindrome("racecar"))
32+
33+
34+
if __name__ == '__main__':
35+
unittest.main()

0 commit comments

Comments
 (0)