LCS最长公共子序列
2017-07-24 10:41
295 查看
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
#define N 1005
int dp[N+1][N+1];
char str1
,str2
;
int lcs(int len1,int len2)
{
int i,j;
int len=max(len1,len2);
for(i=0;i<=len;i++){
dp[i][0]=0;
dp[0][i]=0;
}
for(i=1;i<=len1;i++){
for(j=1;j<=len2;j++){
if(str1[i-1]==str2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
else {
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[len1][len2];
}
int main()
{
while(cin>>str1>>str2){
int len1=strlen(str1);
int len2=strlen(str2);
cout<<lcs(len1,len2)<<endl;
}
return 0;
}
#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
#define N 1005
int dp[N+1][N+1];
char str1
,str2
;
int lcs(int len1,int len2)
{
int i,j;
int len=max(len1,len2);
for(i=0;i<=len;i++){
dp[i][0]=0;
dp[0][i]=0;
}
for(i=1;i<=len1;i++){
for(j=1;j<=len2;j++){
if(str1[i-1]==str2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
}
else {
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}
}
return dp[len1][len2];
}
int main()
{
while(cin>>str1>>str2){
int len1=strlen(str1);
int len2=strlen(str2);
cout<<lcs(len1,len2)<<endl;
}
return 0;
}
相关文章推荐
- 算法导论——动态规划之最长公共子序列(LCS)和最长回文子序列(LPS)
- nyoj 最长公共子序列 36 (简单LCS模板)
- 最长公共子序列(Longest Common Subsequence,LCS)
- 动态规划之最长公共子序列(LCS)
- lightoj 1110 - An Easy LCS 最长公共子序列输出路径
- 最长公共子序列(LCS)
- 最长公共子序列——LCS
- LCS最长公共子序列
- 【字符串系列】最长公共子序列(LCS)
- LCS问题(最长公共子序列)-动态规划实现
- LCS算法(最长公共子序列)
- 51nod 1006 最长公共子序列Lcs(打印路径)
- 最长公共子序列 LCS 【长度及打印】
- 51 Nod 1006 最长公共子序列Lcs
- 动态规划 LCS 求两个序列A,B中全部的最长公共子序列
- 最长上升子序列问题(LIS)和最长公共子序列问题(LCS)
- 51Nod- 1006 最长公共子序列Lcs(动态规划)
- 算法系列之五:最长公共子序列(LCS)问题(非连续子序列)的两种解法
- 最长公共子序列LCS