LCS最长公共子序列S,P
2017-02-09 22:09
218 查看
。俩字符串 S 和 P 求最长公共子序列。
把他们当成矩阵
dp[][]与i j关系
dp[0][0]=0
if S[i]=P[j] dp[i] [j] =dp[i-1][j-1]+1
else dp[i] [j] =MAX(dp[i-1][j], dp[i],j-1])
就这么几个。也算记忆的数组。然后dp[m]
就是最大值
这个栗子 asb 长度3
完整马
#include <iostream>
#include <cstring>
using namespace std;
int dp[111][111] = { 0 };
char s[111] = "a111s111b111";
char p[111] = "aggfhgsfhb";
char sub[111] = {};
int num = 0;
int Max(int a, int b)
{
return a > b ? a : b;
}
void LCS(const char*s, const char* p)
{
for (int i = 0; i < strlen(s); i++)
{
for (int j = 0; j < strlen(p); j++)
{
if (s[i] == p[j])
{
sub[num++] = s[i];//这里是把相同的存入这个子序列 可以打印出来看看结果
dp[i + 1][j + 1] = dp[i][j] + 1;
}
else dp[i + 1][j + 1] = Max(dp[i][j + 1], dp[i + 1][j]);
}
}
}
int main()
{
LCS(s, p);
for (int i = 1; i <= strlen(s); i++)
{
for (int j = 1; j <=strlen(p); j++)
cout << dp[i][j] << " ";
cout << endl;
}
cout << dp[strlen(s)][strlen(p)];
cout << endl << sub;
cin.get();
}打印出 asb 嗯
把他们当成矩阵
dp[][]与i j关系
dp[0][0]=0
if S[i]=P[j] dp[i] [j] =dp[i-1][j-1]+1
else dp[i] [j] =MAX(dp[i-1][j], dp[i],j-1])
就这么几个。也算记忆的数组。然后dp[m]
就是最大值
这个栗子 asb 长度3
完整马
#include <iostream>
#include <cstring>
using namespace std;
int dp[111][111] = { 0 };
char s[111] = "a111s111b111";
char p[111] = "aggfhgsfhb";
char sub[111] = {};
int num = 0;
int Max(int a, int b)
{
return a > b ? a : b;
}
void LCS(const char*s, const char* p)
{
for (int i = 0; i < strlen(s); i++)
{
for (int j = 0; j < strlen(p); j++)
{
if (s[i] == p[j])
{
sub[num++] = s[i];//这里是把相同的存入这个子序列 可以打印出来看看结果
dp[i + 1][j + 1] = dp[i][j] + 1;
}
else dp[i + 1][j + 1] = Max(dp[i][j + 1], dp[i + 1][j]);
}
}
}
int main()
{
LCS(s, p);
for (int i = 1; i <= strlen(s); i++)
{
for (int j = 1; j <=strlen(p); j++)
cout << dp[i][j] << " ";
cout << endl;
}
cout << dp[strlen(s)][strlen(p)];
cout << endl << sub;
cin.get();
}打印出 asb 嗯
相关文章推荐
- 最长公共子序列Lcs
- ACM DP 最长公共子序列Lcs
- 最长公共子序列Lcs (dp)
- 三、动态规划算法解最长公共子序列LCS问题(2011.12.13重写)
- LCS -- 最长公共子序列
- 动态规划—最长公共子序列LCS
- 动态规划算法之:最长公共子序列 & 最长公共子串(LCS)
- 51nod 1006 最长公共子序列Lcs
- 最长公共子序列问题(LCS, Longest Common Subsequence)
- 算法学习--字符串--最长公共子序列(LCS)
- 最长公共子序列(LCS)的两种求解方法
- 最长公共子序列LCS(动态规划)
- POJ 2250 Compromise(文章的最长公共子序列LCS)
- 最长公共子序列(LCS)
- C++实现最长公共子序列LCS问题
- 算法系列之五:最长公共子序列(LCS)问题(非连续子序列)的两种解法
- PKU-1458 Common Subsequence (最长公共子序列LCS)
- 动态规划_最长公共子序列(LCS)
- 动态规划解最长公共子序列问题LCS(longest common subsequence)
- 最长公共子序列LCS问题