๐ฅ๏ธย ์์ํ๋ฉฐ
์ฃผ์ด์ง ๋ฌธ์์ด์์ ๊ฐ์ฅ ๊ธด ํฐ๋ฆฐ๋๋กฌ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ์์ผ ํฉ๋๋ค. ์์์ ์ฝ์ด๋, ๋ค์์ ์ฝ์ด๋ ๊ฐ์ ๋ฌธ์์ด์ ๋ปํฉ๋๋ค.
ย
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค์์ ๊ธฐ์ค์ผ๋ก ํฐ๋ฆฐ๋๋กฌ์ ํ์ฅํด ๋๊ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ต๋๋ค.
ย
- ํฐ๋ฆฐ๋๋กฌ ํ์ฅ ํจ์ ์ ์:
calc(left: int, right: int) -> str
: ์ฃผ์ด์ง ์ธ๋ฑ์คleft
์right
๋ฅผ ์ค์ฌ์ผ๋ก ํฐ๋ฆฐ๋๋กฌ์ ํ์ฅํด ๋๊ฐ๋๋ค.left
์right
๋ ๊ฐ๊ฐ ์ค์ด๋ค๊ณ ๋์ด๋ฉ๋๋ค.
- ํฐ๋ฆฐ๋๋กฌ ํ์:
- ๋ฌธ์์ด
s
์ ๊ฐ ๋ฌธ์๋ฅผ ์ค์ฌ์ผ๋ก ํฐ๋ฆฐ๋๋กฌ์ ํ์ฅํฉ๋๋ค. - ๊ฐ ๋ฌธ์
i
์ ๋ํด ํ์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ๊ณผ ์ง์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ์ ์ฒดํฌํฉ๋๋ค. ๋์ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. calc(i, i)
: ํ์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌํฉ๋๋ค.calc(i, i + 1)
: ์ง์ ๊ธธ์ด ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌํฉ๋๋ค.
ย
โ๏ธย Python
from typing import List class Solution: def longestPalindrome(self, s: str) -> str: # ์ค์์์๋ถํฐ ์๋ค๋ก ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌ def calc(left: int, right: int) -> str: while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return s[left + 1 : right] if len(s) == 0: return "" longest = "" for i in range(len(s)): # ํ์ ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌ odd = calc(i, i) if len(odd) > len(longest): longest = odd # ์ง์ ํฐ๋ฆฐ๋๋กฌ ์ฒดํฌ even = calc(i, i + 1) if len(even) > len(longest): longest = even return longest # ์์ ํ ์คํธ sol = Solution() print(sol.longestPalindrome("babad")) print(sol.longestPalindrome("cbbd"))
ย
๐ย ์๊ฐ
์ค๋๋ง์ ๋ฌธ์์ด์ ๋ค๋ค๋ณธ ๋ฌธ์ ์์ต๋๋ค.
๋๊ธ