博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长公共子序列
阅读量:4047 次
发布时间:2019-05-25

本文共 2095 字,大约阅读时间需要 6 分钟。

#include
#include
#include
#include
using namespace std;#define MAXN 111int dp[MAXN][MAXN];char str1[MAXN],str2[MAXN];int mark[MAXN];int path[MAXN][MAXN];int len1,len2;int main(){ while(~scanf("%s%s",str1,str2)){ len1=strlen(str1); len2=strlen(str2); memset(dp,0,sizeof(dp)); memset(path,0,sizeof(path)); memset(mark,-1,sizeof(mark)); for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ if(str1[i-1]==str2[j-1]){ dp[i][j]=dp[i-1][j-1]+1; }else if(dp[i-1][j]>dp[i][j-1]){ dp[i][j]=dp[i-1][j]; path[i][j]=1; }else { dp[i][j]=dp[i][j-1]; path[i][j]=2; } } } for(int i=len1,j=len2;i>=1&&j>=1;){ if(path[i][j]==0){ i--,j--; mark[i]=j; }else if(path[i][j]==1){ i--; }else j--; } int k=0; for(int i=0;i
#include
#define size 201int Max(int x,int y){return x>y?x:y;}struct rem {int i,j;/*i记录主串位置,j记录副串当前字符位置*/char ch;/*记录当前字符*/};char a[size],b[size];int dp[size][size];rem ans[size];int len;/*指示ans的长度*/void lcs(int m,int n){int i,j;memset(dp,0,sizeof(dp));len = 0;for (i=1;i<=m;i++){for (j=1;j<=n;j++){if(a[i]==b[j])dp[i][j] = dp[i-1][j-1]+1;elsedp[i][j] = Max(dp[i-1][j],dp[i][j-1]);}}if(dp[m][n] == 0)/*如果没有公共序列,直接输出*/printf("%s%s",a,b);else{/*取出最长公共子序列的字母*/i = m,j = n;while (i!=0&&j!=0){if ((dp[i][j] = dp[i-1][j-1]+1)&&a[i] == b[j]){ans[len].i = i;ans[len].j = j;ans[len++].ch = a[i];/*倒序保存最长公共子序列字母*/i--,j--;}else if(dp[i-1][j]>dp[i][j-1])i--;elsej--;}/*取出最长公共子序列的字母*/}}int main(){int a1,b1,i,j,k;while (scanf("%s%s",a+1,b+1)!=EOF){a1 = strlen(a+1);b1 = strlen(b+1);lcs(a1,b1);i = j = 1;for (k=len-1;k>=0;k--){while (i!=ans[k].i){printf("%c",a[i]);i++;}while (j!=ans[k].j){printf("%c",b[j]);j++;}printf("%c",ans[k].ch);i++,j++;}printf("%s%s/n",a+ans[0].i+1,b+ans[0].j+1);}return 0;}

转载地址:http://kjbci.baihongyu.com/

你可能感兴趣的文章
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt 创建异形窗体
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>
RS232 四入四出模块控制代码
查看>>