leetcode(리트코드)6월02일 challenge97-Interleaving String(python)
leetcode(리트코드)6월02일 challenge97-Interleaving String(python)
leetcode June 02일 - Interleaving String 문제입니다.
1. 문제
https://leetcode.com/problems/interleaving-string/
2. Input , Output
3. 분류 및 난이도
Medium 난이도입니다.
6월 02일자 챌린지 문제입니다.
4. 문제 해석
두 개의 문자열이 들어옵니다. 각 문자열을 적절히 조합해서 s3라는 문자열을 만들 수 있으면 True를 리턴하고 만들 수 없으면 False를 리턴합니다.
s1에서 뽑은 경우와 s2에서 뽑은 경우를 계산해야해서 DP를 사용합니다. Discuss를 보고 힌트를 얻었습니다. 이러면 안되는데..
DP방식은 염기서열 문제와 비슷합니다.
5. code
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution:
def isInterleave(self, s1: str, s2: str, s3: str) -> bool:
row = len(s1)+1
col = len(s2)+1
if row + col-2 != len(s3) :
return False
DP = [0] * (row)
for i in range(row) :
DP[i] = [0] * (col)
for i in range(row) :
for j in range(col):
if i == 0 and j == 0:
DP[i][j] = 1
elif i == 0 :
DP[i][j] = (1 if DP[i][j-1] and s2[j-1] == s3[i+j-1] else 0)
elif j == 0:
DP[i][j] = (1 if DP[i-1][j] and s1[i-1] == s3[i+j-1] else 0)
else :
DP[i][j] = 1 if (DP[i-1][j] and s1[i-1] == s3[i+j-1]) or (DP[i][j-1] and s2[j-1] == s3[i+j-1]) else 0
#print(DP)
return DP[row-1][col-1]
6. 결과 및 후기, 개선점
필요시 c++로 풀어드립니다.
This post is licensed under CC BY 4.0 by the author.