위키득계정 ↗
기술

최장 공통 부분 수열

최장 공통 부분 수열기술
영문명
Longest common subsequence
핵심 조건
원래 문자 순서 유지
연속성
중간 문자를 건너뛸 수 있음
두 문자열의 기본 풀이
동적 계획법
최장 공통 부분 수열은 여러 문자열에서 순서를 유지하며 뽑아낼 수 있는 공통 문자 나열 중 길이가 가장 긴 것이다. 문자들이 원문에서 연속해 있을 필요는 없다.

공통으로 남기는 문자

ABXCD와 AYBCD에서는 각각 X와 Y를 제외해 ABCD를 얻을 수 있다. 두 문자열의 공통 부분 수열로 길이 4를 가진다. 문자 순서는 지켜야 하므로 임의로 재배열해 같은 문자 집합을 만드는 문제와는 다르다.

연속 문자열과 차이

앞의 두 문자열에서 ABCD는 어느 쪽에서도 연속한 구간이 아니다. 따라서 공통 부분 수열은 될 수 있어도 공통 부분 문자열은 아니다. 영문 약어 LCS는 두 문제에 모두 쓰일 수 있어 전체 이름을 확인한다.

접두 구간의 답 쌓기

두 문자열의 앞 i개와 앞 j개 문자에서 최장 길이를 표로 저장할 수 있다. 마지막 문자가 같으면 양쪽에서 그 문자를 뺀 길이에 1을 더하고, 다르면 한쪽 마지막 문자를 제외한 두 경우 중 큰 값을 택한다.

길이와 실제 결과

길이를 구하는 것과 어떤 문자 나열이 답인지 복원하는 것은 다른 작업이다. 최장 답이 여러 개일 수도 있다. 한 답을 얻으려면 표에서 선택의 근거를 역추적하는 등의 추가 처리가 필요하다.

관련 문서

문자열 / 동적 계획법 / 최장 공통 부분 문자열 / 배열 / 메모이제이션 / 부분수열 / 알고리즘