算法导论 练习题 15.4-5
来源:互联网 发布:二次元手机ar软件 编辑:程序博客网 时间:2024/05/24 23:15
根据自己思路写的最长公共子序列,稍微修改一下就行了
static int getlastPos(char *s,char c,int pos) { int len=strlen(s),i; for(i=pos-1;i>=0;i--) { if(c==s[i]) return i; } return i; } static int** initM(char *x,char *y) { int xlen=strlen(x); int ylen=strlen(y); int i,j; //m[i][0]:对x[i]之后的字符逐个进行比较,求出目前以x[i]开头最长子串的长度,存储在m[i][1]。//并找到x[i]最靠近y尾部的位置(但保证现在的子串以x[i]开头,即x[i]的位置比目前子串后面的字符在y中位置靠前),存储在m[i][0] //m[i][1]:以x[i]开头的最长子串长度 //m[i][2]:以x[i]开头的最长子串下一个字符位置 int **m=(int **)malloc(xlen*sizeof(int*)); for(i=0;i<xlen;i++) { m[i]=(int*)malloc(3*sizeof(int)); } for(i=0;i<xlen;i++) { m[i][0]=m[i][1]=0;m[i][2]=xlen; } for(i=xlen-1;i>=0;i--) { m[i][0]=getlastPos(y,x[i],ylen); if(m[i][0]!=-1) m[i][1]=1; else m[i][1]=0; for(j=i+1;j<xlen;j++) { int pos=getlastPos(y,x[i],m[j][0]);//保证单调递增 if(x[i]<y[j] && pos>=0 && m[j][1]+1>m[i][1]) { m[i][0]=pos; m[i][1]=m[j][1]+1; m[i][2]=j; } } } return m; } static void printResult(int **m,int xlen,int max,char* x){int i,j;for(i=0;i<xlen;i++){if(m[i][1]==max)break;}while(i<xlen){printf("%c ",x[i]);i=m[i][2];}printf("\n");}
阅读全文
0 0
- 算法导论 练习题 15.4-5
- 算法导论 练习题 15.4-3
- 算法导论 练习题 3.2-5
- 算法导论 练习题 4.1-5
- 算法导论 练习题 4.4-5
- 算法导论 练习题 5.2-5
- 算法导论 练习题 5.3-5
- 算法导论 练习题 6.1-5
- 算法导论 练习题 6.2-5
- 算法导论 练习题 7.2-5
- 算法导论 练习题 7.4-5
- 算法导论 练习题 10.4-5
- 算法导论 练习题 12.1-5
- 算法导论 练习题 13.1-5
- 算法导论 练习题 14.1-5
- 算法导论 练习题 14.3-5
- 算法导论 练习题 15.3-5
- 算法导论 练习题 16.1-5
- 库克拍卖午餐会为慈善筹款,将在苹果新总部举行
- 【算法题】遍历二叉树的所有左叶子节点,求其值之和
- VPS L2TP/IPSec Cisco IPSec一键搭建
- C++数组替代品之vector&array用法浅析
- 小记
- 算法导论 练习题 15.4-5
- 排序
- Eclipse debug faster rcnn出现的一系列问题
- ubuntu / uboot /源码官网
- 第10章 继承
- D
- 学习淘淘商城第七十六课(nginx负载均衡)
- 2.linux
- LIDC-IDRI肺结节数据集xml解释及读取