给出两个字符串,求出这样的一个最长的公共子序列的长度:子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。

Sample Input:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

abcfbc abfcab
programming contest
abcd mnp

Sample Output:
4
2
0

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;  4 char s1[1000];  5 char s2[1000];  6 int maxlen[1000][1000];  7 int main(void)  8 {  9     while (cin >> s1 >> s2) 10  { 11         int length1 = strlen(s1); 12         int length2 = strlen(s2); 13         int i, j; 14         for (i = 0; i <= length1 ; ++i) 15             maxlen[i][0] = 0; 16         for (i = 0; i <= length2 ; ++i) 17             maxlen[0][i] = 0; 18         for (i = 1; i <= length1 ; ++i) 19  { 20             for (j = 1; j <= length2 ; ++j) 21  { 22                 if (s1[i - 1] == s2[j - 1]) 23  { 24                     maxlen[i][j] = maxlen[i - 1][j - 1] + 1; 25  } 26                 else
27  { 28                     maxlen[i][j] = max(maxlen[i - 1][j], maxlen[i][j - 1]); 29  } 30  } 31  } 32         cout << maxlen[length1][length2]<<endl; 33  } 34     return 0; 35 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄