1. DP를 이용한 풀이
class Solution(object):
def longestPalindrome(self, s):
dp=[[0]*len(s) for _ in range(len(s))]
answer=s[0]
for i in range(len(s)):
dp[i][i]=1
for i in range(len(s)-1):
if s[i]==s[i+1]:
dp[i][i+1]=1
answer=s[i:i+2]
for i in range(3,len(s)+1):
for start in range(len(s)-i+1):
end=start+i-1
if s[start]==s[end] and dp[start+1][end-1]:
dp[start][end]=1
answer=s[start:end+1]
return answer
2. 투 포인터(?)를 사용한 풀이
class Solution(object):
def longestPalindrome(self, s):
res=""
for i in range(len(s)):
res=max(self.solution(s,i,i),
self.solution(s,i,i+1),
res, key=len)
return res
def solution(self,s,start,end):
while 0<=start and end<len(s):
if s[start]==s[end]:
start,end = start-1, end+1
else:
break
return s[start+1:end]
'Algorithm' 카테고리의 다른 글
2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2021.04.04 |
---|---|
15. 3Sum (0) | 2021.04.02 |
Python 코딩테스트 팁 01 - 전역 변수 (0) | 2021.03.30 |
정수 내림차순으로 배치하기 (0) | 2021.03.22 |
1781번: 컵라면 (Python) (0) | 2021.01.10 |