Skip to content

Commit 1fea6a6

Browse files
committed
Solve Longest Palindromic Substring
1 parent 211cf45 commit 1fea6a6

File tree

1 file changed

+42
-5
lines changed

1 file changed

+42
-5
lines changed

โ€Žlongest-palindromic-substring/KwonNayeon.py

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
- 1 <= s.length <= 1000
44
- s consist of only digits and English letters.
55
6+
<Solution 1: Brute force>
7+
- ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ฐ’๊ณผ ๋๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹
8+
69
Time Complexity: O(n^3)
710
- ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๊ตฌํ•  ๋•Œ O(n^2)
811
- ๊ฐ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€๋ฅผ ์•Œ์•„๋‚ผ ๋•Œ O(n)
912
1013
Space Complexity: O(1)
11-
12-
Note:
13-
- ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• ์ƒ๊ฐํ•ด๋ณด๊ธฐ/์ฐพ์•„๋ณด๊ธฐ
1414
"""
15-
# Solution 1: Brute force
16-
# ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘๊ฐ’๊ณผ ๋๊ฐ’์„ ์ด์šฉํ•˜์—ฌ ๊ฐ€์žฅ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹
1715
class Solution:
1816
def longestPalindrome(self, s: str) -> str:
1917
longest_palindrome = ""
@@ -29,3 +27,42 @@ def longestPalindrome(self, s: str) -> str:
2927
longest_palindrome = substr
3028

3129
return longest_palindrome
30+
31+
"""
32+
<Solution 2: ํˆฌ ํฌ์ธํ„ฐ ๋ฐฉ๋ฒ•>
33+
- ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ค‘์‹ฌ์—์„œ๋ถ€ํ„ฐ ํŒฐ๋ฆฐ๋“œ๋กฌ ์—ฌ๋ถ€ ์ฒดํฌ
34+
35+
Time Complexity: O(n^2)
36+
- ๋ฉ”์ธ ๋ฃจํ”„: O(n) - ๊ฐ ์œ„์น˜ i์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
37+
- ๊ฐ ๋ฃจํ”„์—์„œ expandAroundCenter ํ˜ธ์ถœ: ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n) - ์ „์ฒด ๋ฌธ์ž์—ด๊นŒ์ง€ ํ™•์žฅ ๊ฐ€๋Šฅ
38+
39+
Space Complexity: O(1)
40+
- ์ถ”๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
41+
"""
42+
class Solution:
43+
def longestPalindrome(self, s: str) -> str:
44+
if not s:
45+
return ""
46+
47+
start = 0
48+
max_len = 1
49+
50+
for i in range(len(s)):
51+
52+
len1 = self.expandAroundCenter(s, i, i)
53+
len2 = self.expandAroundCenter(s, i, i+1)
54+
55+
current_max = max(len1, len2)
56+
57+
if current_max > max_len:
58+
max_len = current_max
59+
start = i - (current_max - 1) // 2
60+
61+
return s[start:start + max_len]
62+
63+
def expandAroundCenter(self, s, left, right):
64+
while left >= 0 and right < len(s) and s[left] == s[right]:
65+
left -= 1
66+
right += 1
67+
68+
return right - left - 1

0 commit comments

Comments
ย (0)