대답? 길이 m
길이는 n 입니다
그들의 가장 긴 공용 서열은 3, 2, 5 이다.
LCS(xi, yj) 를 사용하여 Xi 와 yj 의 가장 긴 공용 하위 시퀀스의 길이를 나타냅니다.
그리고 Xi = 용군일 때, 우리는 Xi 와 용군을 앞으로 이동시켜 탐구할 수 있다.
즉 LCS(Xi, yj)= LCS(Xi- 1, yj- 1)+ 1 입니다.
만약 그들이 같지 않다면, X 를 한 걸음 앞으로 이동하거나 Y 를 한 걸음 앞으로 이동하여 누가 더 큰지 보자.
즉 LCS(Xi, yj)= 맥스 (LCS(Xi- 1, yj), LCS(Xi, yj- 1) 입니다
요약하면 Xi == yj 인 경우:
LCS(Xi, yj)= LCS(Xi- 1, yj- 1)+ 1
그렇지 않은 경우:
-응? LCS(Xi, yj)= 맥스 (LCS(Xi- 1, yj), LCS(Xi, yj- 1))
가장 긴 하위 시퀀스는 무엇입니까?
그럼 근원으로 돌아가자.
I = m- 1, j = n- 1
S = ""
내가>= 0 이고 j>= 0:? # 그 중 하나가 0 이면 멈춥니다
Xi == yj 인 경우:
Xi
그렇지 않은 경우:
LCS(Xi- 1, yj) "LCS (Xi yj-1):
I -= 1
-응? 그렇지 않은 경우:
J? -= 1
반환 s [::-1]
이것이 연속적인 하위 문제라면.
생각을 바꾸자, 우리의 중점은 연속성이어야 한다.
사실, m*n 행렬을 그리면, 이 연속적인 대각선에는 값만 있고, 값은 증가합니다.
그래서 우리는 다른 각도의 DP 방정식으로 표현할 수 있다.
Dp [I] [j] = 0? I == 0 인 경우? 그리고는요. J? = =? 0
Dp [I] [j] = DP [I-1] [j-1? +? 1? Xi == yj
Dp [I] [j]? =? 0 Xi! = yj