码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1458 最长公共子序列

时间:2014-07-18 10:23:55      阅读:272      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   2014   

子序列就是子序列中的元素是母序列的子集,且子序列中元素的相对顺序和母序列相同。

题目要求便是寻找两个字符串的最长公共子序列。

dp[i][j]表示字符串s1左i个字符和s2左j个字符的公共子序列的最大长度。

注意s1第i个字符为s1[i-1]

于是有递推公式:

bubuko.com,布布扣

 

对于abcfbc和abfcab两个字符串,求公共子串的最大长度的过程如图:

bubuko.com,布布扣

bubuko.com,布布扣
 1 //#define LOCAL
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 const int maxn = 1010;
 8 char s1[maxn], s2[maxn];
 9 int dp[maxn][maxn];
10 
11 int main(void)
12 {
13     #ifdef LOCAL
14         freopen("1458in.txt", "r", stdin);
15     #endif
16 
17     while(cin >> s1 >> s2)
18     {
19         int Lenth1 = strlen(s1);
20         int Lenth2 = strlen(s2);
21         memset(dp, 0, sizeof(dp));
22 
23         int i, j;
24         for(i = 1; i <= Lenth1; ++i)
25             for(j = 1; j <= Lenth2; ++j)
26             {
27                 if(s1[i-1] == s2[j-1])
28                     dp[i][j] = dp[i-1][j-1] + 1;
29                 else
30                     dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
31             }
32 
33         printf("%d\n", dp[Lenth1][Lenth2]);
34     }
35     return 0;
36 }
代码君

POJ 1458 最长公共子序列,布布扣,bubuko.com

POJ 1458 最长公共子序列

标签:style   blog   http   color   os   2014   

原文地址:http://www.cnblogs.com/AOQNRMGYXLMV/p/3852560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!