首页 > 代码库 > hdu1159 最大公共子序列
hdu1159 最大公共子序列
题意就不用多说了 这道题就是求两个串的最大公共子序列 注意与最大公共子串的区别
最长公共子序列的结构
最长公共子序列的结构有如下表示:
设序列X=<x1, x2, …, xm>和Y=<y1, y2, …, yn>的一个最长公共子序列Z=<z1, z2, …, zk>,则:
1> 若 xm=yn,则 zk=xm=yn,且Zk-1是Xm-1和Yn-1的最长公共子序列;
2> 若 xm≠yn且 zk≠xm ,则 Z是 Xm-1和 Y的最长公共子序列;
3> 若 xm≠yn且 zk≠yn ,则 Z是 X和 Yn-1的最长公共子序列;
其中Xm-1=<x1, x2, …, xm-1>,Yn-1=<y1, y2, …, yn-1>,Zk-1=<z1, z2, …, zk-1>。
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char str1[1100],str2[1100]; int dp[1100][1100]; int max(int a,int b) { return a>b?a:b; } int main() { int i,j; while(~scanf("%s%s",str1,str2)) { int len1=strlen(str1); int len2=strlen(str2); memset(dp,0,sizeof(dp)); int Max=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-1][j],dp[i][j-1]); } } printf("%d\n",dp[len1][len2]); } return 0; }
hdu1159 最大公共子序列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。