LSC 설명 블로그
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
LCS 코드 - https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
astr = input()
bstr = input()
n = len(astr)
m = len(bstr)
LCS = [[0 for _ in range(m+1)] for _ in range(n+1)]
result = []
for i in range(1, n+1):
for j in range(1, m+1):
if astr[i-1] == bstr[j-1]:
LCS[i][j] = LCS[i-1][j-1] + 1
else:
LCS[i][j] = max(LCS[i][j-1], LCS[i-1][j])
cur = LCS[n][m]
r, c = n, m
while 1:
if cur == 0:
break
if cur == LCS[n-1][m]:
cur = LCS[n-1][m]
n -= 1
elif cur == LCS[n][m-1]:
cur = LCS[n][m-1]
m -= 1
else:
result.append(bstr[m-1])
cur = LCS[n-1][m-1]
n-=1
m-=1
print(len(result))
# for i in range(len(result)-1, -1 , -1):
# print(result[i], end='')
'코테 > 코딩테스트 대비 Python' 카테고리의 다른 글
백준 감시 (0) | 2023.11.15 |
---|---|
백준 가희와 은행 (0) | 2023.11.12 |
백준 스타트 택시 (0) | 2023.05.25 |
백준 마법사 상어와 파이어볼 Python (0) | 2023.05.22 |
백준 인구이동 BFS (1) | 2023.05.21 |
LSC 설명 블로그
[알고리즘] 그림으로 알아보는 LCS 알고리즘 - Longest Common Substring와 Longest Common Subsequence
LCS는 주로 최장 공통 부분수열(Longest Common Subsequence)을 말합니다만, 최장 공통 문자열(Longest Common Substring)을 말하기도 합니다.
velog.io
LCS 코드 - https://www.acmicpc.net/problem/9251
9251번: LCS
LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다.
www.acmicpc.net
astr = input()
bstr = input()
n = len(astr)
m = len(bstr)
LCS = [[0 for _ in range(m+1)] for _ in range(n+1)]
result = []
for i in range(1, n+1):
for j in range(1, m+1):
if astr[i-1] == bstr[j-1]:
LCS[i][j] = LCS[i-1][j-1] + 1
else:
LCS[i][j] = max(LCS[i][j-1], LCS[i-1][j])
cur = LCS[n][m]
r, c = n, m
while 1:
if cur == 0:
break
if cur == LCS[n-1][m]:
cur = LCS[n-1][m]
n -= 1
elif cur == LCS[n][m-1]:
cur = LCS[n][m-1]
m -= 1
else:
result.append(bstr[m-1])
cur = LCS[n-1][m-1]
n-=1
m-=1
print(len(result))
# for i in range(len(result)-1, -1 , -1):
# print(result[i], end='')
'코테 > 코딩테스트 대비 Python' 카테고리의 다른 글
백준 감시 (0) | 2023.11.15 |
---|---|
백준 가희와 은행 (0) | 2023.11.12 |
백준 스타트 택시 (0) | 2023.05.25 |
백준 마법사 상어와 파이어볼 Python (0) | 2023.05.22 |
백준 인구이동 BFS (1) | 2023.05.21 |