博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【编程题目】最长公共字串
阅读量:7108 次
发布时间:2019-06-28

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

56.最长公共字串(算法、字符串)。

题目:如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,
则字符串一称之为字符串二的子串。
注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。
请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。
例如:输入两个字符串 BDCABA 和 ABCBDAB,字符串 BCBA 和 BDAB 都是是它们的最
长公共子串,则输出它们的长度 4,并打印任意一个子串。

 

经典动态规划题。

#include 
#include
#include
void printLCS(char * X, int m, int n, int i, int j, char * B) { if (i < 0 || j < 0) { return; } char b = *(B + i * n + j); if (b == 'y') { printLCS(X, m , n, i - 1, j - 1, B); printf("%c ", X[i]); //先得到的是后面的共同字母,应该在后面打印出来 } else if (b == 'u') { printLCS(X, m , n, i - 1, j, B); } else { printLCS(X, m , n, i, j - 1, B); }}int LCS(char * X, char * Y, int m, int n, char * & B) //返回最大公共子串的长度{ int * C = (int *)malloc((m + 1) * (n + 1) * sizeof(int)); //记录每个子问题的最长公共子序列 0-m 0-n B = (char *)malloc(m * n * sizeof(char)); //标记 1-m 1-n memset(C, 0, (m + 1) * (n + 1) * sizeof(int)); //初始化为全0 for (int i = 0; i < m; i++) { int * crow_1 = C + i * (n + 1); //注意 C 中 i = 1 j = 1 对应 X的X[0] 与 Y的Y[0] int * crow = C + (i + 1) * (n + 1); char * brow = B + i * n; //注意 B 中 i = 0 j = 0 对应 X的X[0] 与 Y的Y[0] for(int j = 0; j < n; j++) { if (X[i] == Y[j]) { crow[j + 1] = crow_1[j] + 1; brow[j] = 'y'; } else { crow[j + 1] = (crow_1[j + 1] > crow[j]) ? crow_1[j + 1] : crow[j]; brow[j] = (crow_1[j + 1] > crow[j]) ? 'u' : 'l'; } } } printLCS(X, m, n, m - 1, n - 1, B); int maxlen = *(C + m * (n + 1) + n); free(C); free(B); return maxlen;}int main(){ char X[7] = {
'A','B','C','B','D','A','B'}; char Y[6] = {
'B','D','C','A','B','A'}; char * B = NULL; int l = LCS(X, Y, 7, 6, B); return 0;}

 

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

你可能感兴趣的文章
关于 android receiver
查看>>
Automysqlbackup: WARNING: Turning off multicore support, since pigz isn’t there.
查看>>
Matlab中如何将(自定义)函数作为参数传递给另一个函数
查看>>
PCL—低层次视觉—点云分割(RanSaC)
查看>>
Apache、tomcat、Nginx常用配置合集
查看>>
每天一个linux命令(34):kill命令
查看>>
安装fcitx [Crunch bang] [debian]
查看>>
记录sql语句的执行记录,用于分析
查看>>
js和jquery判断事件流
查看>>
【安卓特效】怎样给ImageView加上遮罩,点击时泛黑、或泛白、?
查看>>
HDU--3829--Cat VS Dog【最大点独立集】
查看>>
SQL约束
查看>>
第十一章 非对称加密算法--DH
查看>>
HDU 3265 Posters
查看>>
iframe超时处理。。。。
查看>>
MyCAT实现MySQL的读写分离
查看>>
Codeforces554A:Kyoya and Photobooks
查看>>
PHP curl_setopt函数用法介绍补充篇
查看>>
汇编题目:在屏幕中间显示a-z的所有字母,按ESC键改变字符颜色
查看>>
AIM Tech Round (Div. 2) D. Array GCD dp
查看>>