Longest Common Subsequence

https://vjudge.net/problem/Aizu-ALDS1_10_C

最长公共子串:根据两个字符串相同位置匹配结果的不同,会得到不一样的处理方式

设两个字符串分别为X,Y;

c[i][j]:该数组中c[i][j]代表Xi与Yi的LCS长度

 

 

 

二维数组c的保存状况,匹配过程如下图所示

 

 

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 static const int N=1000;
 5 using namespace std;
 6 int c[N+1][N+1];
 7 int lcs(string X,string Y)
 8 {
 9     int m=X.size();
10     int n=Y.size();
11     int maxl=0;
12     X=' '+X;
13     Y=' '+Y;
14     for(int i=1; i<=m; i++)
15         c[i][0]=0;
16     for(int j=1; j<=n; j++)
17         c[0][j]=0;
18     for(int i=1; i<=m; i++)
19     {
20         for(int j=1; j<=n; j++)
21         {
22             if(X[i]==Y[j])
23                 c[i][j]=c[i-1][j-1]+1;
24             else
25             {
26                 c[i][j]=max(c[i-1][j],c[i][j-1]);
27             }
28             maxl=max(maxl,c[i][j]);
29         }
30     }
31     return maxl;
32 }
33 int main()
34 {
35     string s1,s2;
36     int n;
37     cin>>n;
38     for(int i=0; i<n; i++)
39     {
40         cin>>s1>>s2;
41         cout<<lcs(s1,s2)<<endl;
42     }
43     return 0;
44 }

 

posted @ 2020-12-03 19:11  BlackSnow  阅读(84)  评论(0)    收藏  举报