일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- DWG
- 715. Range Module
- Substring with Concatenation of All Words
- 컴퓨터의 구조
- shiba
- iterator
- 315. Count of Smaller Numbers After Self
- data science
- 30. Substring with Concatenation of All Words
- Regular Expression
- attribute
- Decorator
- 파이썬
- Class
- 시바견
- concurrency
- t1
- Python
- 밴픽
- 43. Multiply Strings
- Convert Sorted List to Binary Search Tree
- 109. Convert Sorted List to Binary Search Tree
- LeetCode
- Python Code
- Python Implementation
- Protocol
- 운영체제
- Generator
- kaggle
- 프로그래머스
Archives
- Today
- Total
Scribbling
LeetCode: 5. Longest Palindromic Substring 본문
Computer Science/Coding Test
LeetCode: 5. Longest Palindromic Substring
focalpoint 2021. 8. 12. 19:34
Dynamic Programming을 이용한 방법:
X + <Palindrome Substring> + X 는 Palindrome Substring이다는 특성을 이용한다.
위를 bottom-up으로 구현하려면, 문자열의 길이가 커지는 순(1, 2, 3, ....) 으로 DP를 연산하면 된다.
class Solution:
def longestPalindrome(self, s: str) -> str:
ret = ""
is_Palindrome = [[False] * len(s) for _ in range(len(s))]
for i in range(len(s)):
is_Palindrome[i][i] = True
ret = s[i:i+1]
for i in range(len(s)-1):
if s[i] == s[i+1]:
is_Palindrome[i][i+1] = True
ret = s[i:i+2]
for length in range(3, len(s)+1):
# i: substring starting idx
for i in range(0, len(s) - length + 1):
# j: substring last indx
j = i + length - 1
if j >= len(s):
break
if s[i] == s[j] and is_Palindrome[i+1][j-1]:
is_Palindrome[i][j] = True
if length > len(ret):
ret = s[i:j+1]
return ret
대칭의 특성을 이용한 방법:
전체 string의 모든 문자에 대해 해당 문자가 대칭의 중심이 되는지 여부를 계산한다.
class Solution:
def longestPalindrome(self, s: str) -> str:
def get_Panlindromic_idx(s, idx):
ret = ''
l = idx - 1
r = idx + 1
while l >= 0 and r < len(s):
if s[l] != s[r]:
break
l -= 1
r += 1
ret = s[l+1:r]
if idx >= 1 and s[idx-1] == s[idx]:
l = idx - 2
r = idx + 1
while l >= 0 and r < len(s):
if s[l] != s[r]:
break
l -= 1
r += 1
if len(s[l+1:r]) > len(ret):
ret = s[l+1:r]
return ret
ret = ''
for idx in range(0, len(s)):
substr = get_Panlindromic_idx(s, idx)
if len(substr) > len(ret):
ret = substr
return ret
'Computer Science > Coding Test' 카테고리의 다른 글
LeetCode: 207. Course Schedule (0) | 2021.08.14 |
---|---|
LeetCode: 1584. Min Cost to Connect All Points (0) | 2021.08.13 |
LeetCode: 787. Cheapest Flights Within K Stops (0) | 2021.08.12 |
LeetCode: 3. Longest Substring Without Repeating Characters (0) | 2021.08.11 |
LeetCode: 1334. Find the City With the Smallest Number of Neighbors at a Threshold Distance (0) | 2021.08.10 |