最长公共子串
来源:互联网 发布:普拉达男包高仿淘宝店 编辑:程序博客网 时间:2024/04/29 18:46
输入两个字符串,求其中的最长公共子串。
设两个子串分别是a、b,比较简单的思路是将两个子串横纵排列对比,建立一个length(a)*length(b)的矩阵:
如a[]="123shuangshuar",b="ashuan123";对比矩阵:
遍历矩阵,碰到1则沿对角线遍历,沿对角线时若遇到0则返回,并更新公共子串长度和位置标记值。
#include <stdio.h>#include <stdlib.h>#define SIZE 1000char a[SIZE];char b[SIZE];int length(char *m){ int Length = 0; int i=0; while(m[i]!='\0') { Length++; i++; } return Length;}int main(){ scanf("%s%s",a,b); int c = length(a); int d = length(b); int e[c][d]; int i,j; for(i=0;i<c;i++) for(j=0;j<d;j++) { if(a[i] == b[j]) e[i][j] = 1; else e[i][j] = 0; } int mark = -1; int ok = 0; for(i=0;i<c;i++) for(j=0;j<d;j++) { int r = i; int s = j; int temp = 0; while((e[r][s] == 1)&&(r<c)&&(s<d)) { temp++; r += 1; s += 1; } if(temp > ok) { ok = temp; mark = j; } } if(mark == -1) return -1; printf("最长公共子串是:\n"); for(i=mark;i<mark+ok;i++) printf("%c",b[i]); return 0;}
测试结果:
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- 最长公共子串
- application和session的区别
- java基础知识2
- 数据结构作业1
- Boost 常用的库
- android图像存储之使用MediaStore
- 最长公共子串
- _cdecl和_stdcall的区别
- python初体验(1)基础篇
- 图像去雾--- 何凯明博士 ------- dark channel prior
- k路归并(败者树,记录败者)
- 贝加莱界面编程
- 将十进制数转换成二进制数的代码
- ZeroMQ研究与应用分析
- python初体验(2)——面向对象篇