最长公共子序列 LCS
2017-08-19 11:05
288 查看
感觉这里最烦人的是字符串从0开始存,所以应该注意位置与下标的区别
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 510;
int main()
{
char x
, y
;
int len1, len2;
int len
;
while(~scanf("%s%s", x, y))
{
len1 = strlen(x);
len2 = strlen(y);
memset(len, 0, sizeof(len));
for(int i = 1; i <= len1; i++)
{
for(int j = 1; j <= len2; j++)
{
if(x[i-1] == y[j-1])
len[i][j] = len[i-1][j-1] + 1;
else
len[i][j] = max(len[i][j-1], len[i-1][j]);
}
}
int MAX = 0;
for(int i = 1; i <= len1; i++)
for(int j = 1; j <= len2; j++)
if(len[i][j] > MAX)
MAX = len[i][j];
printf("%d\n", MAX);
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 510;
int main()
{
char x
, y
;
int len1, len2;
int len
;
while(~scanf("%s%s", x, y))
{
len1 = strlen(x);
len2 = strlen(y);
memset(len, 0, sizeof(len));
for(int i = 1; i <= len1; i++)
{
for(int j = 1; j <= len2; j++)
{
if(x[i-1] == y[j-1])
len[i][j] = len[i-1][j-1] + 1;
else
len[i][j] = max(len[i][j-1], len[i-1][j]);
}
}
int MAX = 0;
for(int i = 1; i <= len1; i++)
for(int j = 1; j <= len2; j++)
if(len[i][j] > MAX)
MAX = len[i][j];
printf("%d\n", MAX);
}
return 0;
}
相关文章推荐
- 程序员编程艺术第十一章:最长公共子序列(LCS)问题
- 动态规划之最长公共子序列(LCS)问题
- 最长公共子序列(LCS) c语言/c++
- 最长公共子序列(LCS)问题(非连续子序列)的两种解法
- 最长公共子序列(Longest Common Subsequence LCS)
- 最长公共子序列(LCS)
- 最长公共子序列LCS
- 最长公共子序列问题LCS
- 【LIS和LCS】最长上升子序列和最长公共子序列
- LCS 最长公共子序列(不连续)
- 动态规划——最长公共子序列(LCS)
- UVA 11404 DP+LCS(最长公共子序列)
- 最长公共子序列(LCS)和最长公共子串(LCSubString)
- 模板:LCS(最长公共子序列)
- 最长公共子序列LCS
- 最长公共子序列问题LCS Longest Common Subsequence
- 动态规划算法解最长公共子序列LCS问题
- 算法设计之最长公共子序列(LCS)问题
- POJ 2250 Compromise(最长公共子序列LCS)
- 最长公共子序列(LCS)问题