最长公共子序列
来源:互联网 发布:理财网站源码交易平台 编辑:程序博客网 时间:2024/05/01 23:35
此题的目的是求两个字符串的最长公共子序列,例如abcfbc abfcab最长公共子序列的长度是4;公共子序列是abfc;这是一道动态规划的题,这里给出两种方法,一种是求出长度的,另一种是求出公共的串,如果没有公共的子序列则第二种方法没有输出;
注意:如果是要提交杭电上面的最长公共子序列的那道题,你的数组不能开的太大,但是也不能太小了;500就已经足够了,如果太大会显示超内存的;
代码如下:
//第一种方法
#include <stdio.h>
#include <string.h>
const int mm=500;
char str1[mm],str2[mm];
int dp[mm][mm];
int main()
{
int i,j,len1,len2;
memset(dp,0,sizeof(dp));
while(scanf("%s%s",str1,str2)!=-1)
{
len1=strlen(str1);
len2=strlen(str2);
for(i=0;i<len1;i++)
{
for(j=0;j<len2;j++)
{
if(str1[i]==str2[j])
{
dp[i+1][j+1]=dp[i][j]+1;
continue;
}
if(dp[i+1][j]>dp[i][j+1])
{
dp[i+1][j+1]=dp[i+1][j];
}
else
{
dp[i+1][j+1]=dp[i][j+1];
}
}
}
printf("%d\n",dp[len1][len2]);
}
return 0;
}
/ / 第二种方法:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
const int maxn = 1000+100;
int dp[maxn][maxn], c[maxn][maxn];
char str1[maxn], str2[maxn];
void inital()
{
memset(dp,0,sizeof(dp));
memset(c,-1,sizeof(c));
}
void print(int i, int j)
{
if(i<1 || j<1)return;
if(c[i][j] == 0)
{
print(i-1,j-1);
printf("%c",str1[i]);
}
if(c[i][j] == 1)
{
print(i-1,j);
}
if(c[i][j] == -1)
{
print(i,j-1);
}
}
int main()
{
while(scanf("%s%s",str1+1,str2+1) != EOF)
{
int len1 = strlen(str1+1), len2 = strlen(str2+1);
inital();
for(int i = 1; i <= len1; i++)
{
for(int j = 1; j <= len2; j++)
{
if(str1[i] == str2[j])
{
dp[i][j] = dp[i-1][j-1]+1;c[i][j] = 0;
continue;
}
if(dp[i-1][j] > dp[i][j-1])
{
dp[i][j] = dp[i-1][j];
c[i][j] = 1;
}
else
{
dp[i][j] = dp[i][j-1];
c[i][j] = -1;
}
}
}
print(len1,len2);
}
return 0;
}
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 【LeetCode】Candy
- 队列应用场景,自己实现队列(二)
- ORACLE 9i装配后找不到监听程序!
- Android中如何查看内存
- 应广大群众的要求,今天开始连载《超容易的Linux系统管理入门书》一书
- 最长公共子序列
- ASCII 控制字符
- 美好的一天从分手开始
- Nutch爬虫运行流程分析
- opnet初探以及Packet Switching I实验过程中的若干问题的思考
- 宝宝取名要考虑五行八字吗
- FREEBSD升级和优化全攻略
- cassandra的架构——Data distribution and replication(分布式存储和复制)
- 设计模式 - 装饰者模式(Decorator Pattern) 详解