【面试准备】最长公共子序列
2014-09-01 19:06
190 查看
#include <iostream> #include <string.h> using namespace std; #define MAXLEN 100 void LCSLength(char* x, char *y, int m, int n, int c[][MAXLEN], int b[][MAXLEN]) {//c[][]记录x[i]与y[i]的LCS长度;b[][]记录c[i][j]是通过哪一个子问题的值求得的以决定搜索方向 for (int i = 0; i <= m; ++i) { c[i][0] = 0; } for (int i = 0; i <= n; ++i) { c[0][i] = 0; } for(int i = 1 ; i <= m; ++i){ for(int j = 1;j <= n; ++j){ if(x[i-1] == y[i-1]){ c[i][j] = c[i-1][j-1]+1; b[i][j] = 0; } else if(c[i-1][j] > c[i][j-1]){ c[i][j] = c[i-1][j]; b[i][j] = 1; } else{ c[i][j] = c[i][j-1]; b[i][j] = -1; } } } } void PrintLCS(int b[][MAXLEN],char* x,int i,int j){ if(i == 0|| j == 0){ return ; } if(b[i][j] == 0){ PrintLCS(b,x,i-1,j-1); cout<<x[i-1]; } else if(b[i][j] == 1){ PrintLCS(b,x,i-1,j); } else{ PrintLCS(b,x,i,j-1); } } int main() { char x[MAXLEN]; char y[MAXLEN]; int b[MAXLEN][MAXLEN]; int c[MAXLEN][MAXLEN]; int m,n; cout<<"Input!"<<endl; cin>>x; cout<<"Input!"<<endl; cin>>y; m = strlen(x); n = strlen(y); LCSLength(x,y,m,n,c,b); PrintLCS(b,x,m,n); return 0; }
相关文章推荐
- 超详细Android面试的准备与经历分享 | 百度(offer)
- 面试前的准备工作
- 【面试准备】letcode-Copy List with Random Pointer
- 转载一个google面试的准备清单
- 机器学习-算法工程师 -面试/笔试准备-重要知识点梳理
- 老司机谈秋招详细攻略——从准备到面试
- 面试准备之solr集群及solr集群中zookeeper的应用和activeMQ
- 【转载Google】如何准备软件工程师的面试
- c++面试准备之螺旋队列
- 百度2015测试开发面试:两个字符串的最长公共子序列
- 一个四五年的Java开发程序员,该准备哪些去面试?
- 面试准备3---------树遍历
- 如何去准备Android技术面试(简历,技术面)
- 面试准备之面试题(C++) (一)
- 面试时必须准备的100个关键问题
- java面试准备-day03-并发包类
- Java研发方向如何准备BAT技术面试答案(中)
- BAT面试的准备—iOS篇
- 走近腾讯 走进腾讯(一个关于面试准备的记录)
- .NET面试准备之数据库备份