正文

最长公共子序列(DP)2007-07-10 18:17:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/27451.html

分享到:

题目:有两个字符串,求这两个字符串的最长公共子序列,所谓公共子序列是指下标依次递增的字符串,如 abcdefsg kbcdssssfsg 的最长公共子序列为bcdgsg,字符串的长度范围为 [1,100] 输入:多个实例,每个实例两行,每行一个字符串输出:形式为 Case x:zzz ,x表示实例序号,从1开始,zzz 表示最长公共子序列每个实例的输出占一行。 如:输入:ababagbcdfkkbdckdabcdefsgkbcdssssfsg 输出:Case 1:abCase 2:bcfCase 3:bcdfsg // my code#include <stdio.h>#include <string.h>char a[100],b[100],m[101][101]={0};void putOut(int i, int j){ if(i==0 || j==0)  return; else if(m[i][j] == m[i-1][j-1]+1){  putOut(i-1,j-1);  putchar(a[i-1]); } else if(m[i][j] > m[i-1][j])  putOut(i,j-1); else  putOut(i-1,j);} int main(void){ unsigned int  i,j,n=1; while(gets(a)!=NULL){  gets(b);  for(i=1; i<=strlen(a); i++)   for(j=1; j<=strlen(b); j++){    if(a[i-1] == b[j-1])     m[i][j] = m[i-1][j-1]+1;    else if(m[i-1][j] > m[i][j-1])     m[i][j] = m[i-1][j];    else     m[i][j] = m[i][j-1];   }  printf("Case %u:",n++);   putOut(strlen(a),strlen(b));  putchar('\n'); } return 0;}

阅读(3397) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册