Longest Common Subsequence(LCS)는 두 개의 문자열이나 순열에서 가장 긴 공통의 부분 순열을 찾는 문제입니다. 여기서 부분 순열이란 어떤 문자열에서 몇몇 문자를 제거하여 얻을 수 있는 새로운 문자열을 말합니다.
예를 들어, "ABCBDAB"와 "BDCAB"의 LCS는 "BDAB" 또는 "BCAB" 등이 될 수 있습니다.
LCS 문제는 다이나믹 프로그래밍(Dynamic Programming)을 이용해 효율적으로 해결할 수 있습니다.
def lcs(X , Y):
m = len(X)
n = len(Y)
L = [[0] * (n+1) for i in range(m+1)]
for i in range(m+1):
for j in range(n+1):
if i == 0 or j == 0 :
L[i][j] = 0
elif X[i-1] == Y[j-1]:
L[i][j] = L[i-1][j-1] + 1
else:
L[i][j] = max(L[i-1][j], L[i][j-1])
return L[m][n]
X = "ABCBDAB"
Y = "BDCAB"
print("Length of LCS is ", lcs(X, Y))
LCS 알고리즘은 문자열이나 시퀀스의 유사도를 측정하는 데 유용하므로, 이를 알고 있으면 문자열 관련 문제나 시퀀스 정렬 등에 활용할 수 있습니다.