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 }

浙公网安备 33010602011771号