Programming/leetcode
5. Longest Palindromic Substring
홍열
2021. 1. 25. 15:30
728x90
문자열의 부분중 가장 긴 회문 찾기 문제이다.
Dynamic Programming(이하 DP)으로 많이 풀지만, 이번에는 window sliding기법을 이용해서 풀어보자.
사실 DP로 푸는 것은 잘 이해가 되지 않았다..
더보기
Input: s = "babad"
Output: "bab"
Note: "aba" is also a valid answer.
아이디어는 이렇다.
현재 위치를 중심으로 양 옆을 늘려가면서 회문인지 확인하는 것이다.
ex) 'abac'에서 위치를 찾아보자. 두번째 'b'의 위치에서 보자
b를 중심으로 양 옆에 'a'가 있고, 'aba'는 회문이 된다.
하지만 이 아이디어에서 조심해야될것이 중심을 홀수, 짝수를 구분해야된다는 것이다.
이유는 홀수, 짝수 일때 중심이 달라지기때문이다.
def longestPalindrome(self, s: str) -> str:
def searchPalindrome(left, right):
length = len(s)
# 범위 확인과 양쪽 끝값이 같으면 범위 확장
while left >=0 and right < length and s[left] == s[right]:
left -= 1
right += 1
# 마지막에 확장한 범위를 하나 줄여서 값을 구한다.
return s[left+1:right]
# 들어온 입력값이 2 이하이면 회문을 구할 필요도 없지!
if len(s)<2:
return s
result = ""
for i in range(len(s)):
# 홀수
s1 = searchPalindrome(i,i)
# 짝수
s2 = searchPalindrome(i,i+1)
# 더 긴 것을 채택
if len(result) < len(s1):
result = s1
if len(result) < len(s2):
result = s2
return result