输出最长公共子序列
来源:互联网 发布:mac 隐藏文件夹显示 编辑:程序博客网 时间:2024/04/30 10:35
给定字符串 输出最大的公共子序列 如果有多个输出任意一个 如果没有就输出0
#include<stdio.h>
#include<string.h>
int a[100][100];
char str1[1000];
int k=0,flag;
void ok(int m,int n)
{
//printf("%d %d\n",m,n);
if(m==0||n==0)
return ;
if(a[m][n]==0)
{
flag=1;
ok(m-1,n-1);
printf("%c",str1[m]);
}
else if(a[m][n]==1)
{
ok(m,n-1);
}
else
{
ok(m-1,n);
}
}
int main()
{
char str2[1000];
int i,j,m,n,dp[105][105];
while(scanf("%s%s",str1+1,str2+1)!=EOF)
{
flag=0;
memset(dp,0,sizeof(dp));
m=strlen(str1+1);
n=strlen(str2+1);
for(i=1; i<=m; i++)
for(j=1; j<=n; j++)
{
if(str1[i]==str2[j])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else if(dp[i][j-1]>=dp[i-1][j])
{
dp[i][j]=dp[i-1][j];
a[i][j]=1;
}
else
{
dp[i][j]=dp[i-1][j];
a[i][j]=-1;
}
}
ok(m,n);
if(flag==0)
printf("0");
printf("\n");
}
return 0;
}
没有的情况 如 abc def
m=3 n=3
m=3 n=2
m=3 n=1
m=3 n=0
开始向上递归 m=3 n=1由m=3 n=0推出所以没有公共子序列
- 输出最长公共子序列
- 输出最长公共子序列
- 输出最长公共子序列
- 输出最长公共子序列
- 输出所有的最长公共子序列
- 输出最长公共子序列字母表顺序
- **输出最长公共子序列-字符串
- 最长公共子序列及其输出
- 输出所有的最长公共子序列
- LCS 最长公共子序列并输出该序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- adcfgclone.pl运行ouicli.pl错误
- 利用IStorage和IStream存储自定义数据到Inventor文件 (C++)
- android -- MemoryFile 内存文件(IO性能优化)
- 2行数据只有一列数据不同(不是主键),怎么合并成1行?
- Android代码混淆
- 输出最长公共子序列
- PHP的采集插件simple_html_dom的转码bug
- FOJ 2170 花生的序列 DP
- Sap Tree Control
- pymogo数据库连接错误
- 树莓派玩家需要的X条核心品格
- 最大似然估计方法
- 欧拉错排公式
- 使用 Socket 类向 HTTP 服务器发送数据和接收响应。