Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 리트코드
- 와썹맨
- 규칙없음
- 프로그래머스
- 삼성인 아마조니언 되다
- 나는 아마존에서 미래를 다녔다
- minimum path sum
- Dynamic Programmin
- mysql #numa #swap #memory
- 트리
- BFS
- 김태강
- 기술적 채무
- 그거봤어?
- No Rules Rules
- 파이썬
- 삼성역량테스트
- LongestPalindromicSubstring
- 독후감
- 아마조니언
- 알고리즘
- 리스트의 리스트
- Unique Paths
- Envoy
- 동적 프로그래밍
- list of list
- 블린이
- Python
- technical debt
- leetcode
Archives
- Today
- Total
개발자가 되고 싶은 준개발자
[LeetCode] 5. Longest Palindromic Substring 풀이 및 코드 본문
동적 프로그래밍 카테고리에 있는 문제로 가장 긴 앞뒤가 같은 문자열을 찾는 문제이다.
풀이
동적 프로그래밍으로 문제를 풀기 위해서는 계산한 결과를 저장하여 다음에 '재사용'하여야 한다.
Palindrome은 앞뒤가 같은 문자열로, 전체가 palindrome이면 부분도 palindrome이다. "abcba"로 예를 들어보자. "abcba"가 palindrome이면, "bcb", "c"도 모두 palindrome이다.
따라서 작은 문제부터 풀고, 큰 문제는 +𝛂만 추가로 확인하면 된다. 우선 가장 가운데의 "c"가 palindrome인지 확인하고, 맞다면 그 양 옆의 문자인 "b"를 추가로 확인한다. 양 옆의 문자가 같다면, 이 또한 palindrome이다. 그러면 다시 그 양 옆의 문자를 확인하는 식으로 문자열의 끝까지 확인한다.
코드
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
lookup_table = [[0 for _ in range(len(s))] for _ in range(len(s)+1)]
maxLen = 0
maxStr = ""
for i in range(len(s)):
for j in range(i, len(s)):
if i == 0:
lookup_table[i+1][j] = 1
else:
if lookup_table[i-1][j-1] >= 0 and s[j] == s[j-i]:
lookup_table[i+1][j] = lookup_table[i-1][j-1]+2
else:
lookup_table[i+1][j] = -1
if lookup_table[i+1][j] > maxLen:
maxLen = lookup_table[i+1][j]
maxStr = s[j-i:j+1]
return maxStr
리트코드 제출 결과
참조
'알고리즘 공부 > LeetCode' 카테고리의 다른 글
[LeetCode] 101. Symmetric Tree 풀이 및 코드 (1) | 2020.09.26 |
---|---|
[LeetCode] 91. Decode Ways 풀이 및 코드 (0) | 2020.09.20 |
[LeetCode] 64. Minimum Path Sum 풀이 및 코드 (0) | 2020.09.19 |
[LeetCode] 63. Unique Paths Ⅱ풀이 및 코드 (0) | 2020.09.19 |
[LeetCode] 62. Unique Paths 풀이 및 코드 (0) | 2020.09.18 |