最长公共子序列LCS

Posted starry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长公共子序列LCS相关的知识,希望对你有一定的参考价值。

51Nod 1006

 

a[i][j]  为a1,a2...ai与b1,b2....bj最长的公共子序列。

 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 const int N = 1e3+10;
 5 int a[N][N];
 6 char s[N], ss[N], sss[N];
 7 int main(){
 8     scanf("%s %s",s+1,ss+1);
 9     int i,j;
10     for(i = 1; s[i]; i ++){
11         for(j = 1; ss[j]; j ++){
12             if(s[i] == ss[j]) a[i][j] = a[i-1][j-1] + 1;
13             else a[i][j] = max(a[i-1][j],a[i][j-1]);
14         }
15     }
16     i--;j--;
17     int k = N -1;
18     while(i > 0 && j > 0){
19         if(s[i] == ss[j]){
20             sss[k--] = s[i];
21             i--;j--;
22         }else if(a[i-1][j] > a[i][j-1]){
23             i--;
24         }else{
25             j--;
26         }
27     }
28     printf("%s\n",sss+k+1);
29     return 0;
30 }

 

以上是关于最长公共子序列LCS的主要内容,如果未能解决你的问题,请参考以下文章

每日一题-——最长公共子序列(LCS)与最长公共子串

最长公共子序列(LCS)

LeetCode(LCSி)最长公共子序列&变形应用

最长公共子序列 LCS

最长公共子序列(LCS)

最长公共子序列(LCS)