#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
char str1[1050], str2[1050];
int f[1050][1050];
struct poj1458 {
/*[问题描述]:求连个序列的最长公共子序列的长度*/
/*[解题思路]:f[i][j]表示序列str1[1,...i]与序列str2[1,...j]的最长公共子序列的长度,
* 则f[i][j]的值可以通过比较两个序列的最后一个元素得到
*/
void work() {
while (cin >> str1 + 1 >> str2 + 1) {
int l1 = strlen(str1 + 1);
int l2 = strlen(str2 + 1);
for (int i = 0; i <= l1; i++) {
for (int j = 0; j <= l2; j++) {
if (i != 0 && j != 0) {
if (str1[i] == str2[j])
f[i][j] = f[i - 1][j - 1] + 1;
else
f[i][j] = max(f[i - 1][j], f[i][j - 1]);
}
else
f[i][j] = 0;
}
}
cout << f[l1][l2] << endl;
}
}
};
int main()
{
poj1458 solution;
solution.work();
return 0;
}
poj1458-Common Subsequence(最长公共子序列)
最新推荐文章于 2019-06-26 23:27:01 发布
本文介绍了一种求解两个序列最长公共子序列(LCS)的经典动态规划算法,并通过一个C++程序具体实现了该算法。文章详细展示了如何利用二维数组记录中间结果来避免重复计算,从而高效地找到最长公共子序列的长度。

1522

被折叠的 条评论
为什么被折叠?



