最大公共子串(C语言实现)
2015-11-12 20:29
453 查看
给定两个字符串A和B,输出A和B中的最大公共子串。比如A=”aocdfe”,B=”pmcdfa”,则输出“cdf”
方法1:
方法2:
方法1:
#include<stdio.h> #include<stdlib.h> #include<string.h> char *commstring(char *str1,char *str2) { char *s1,*s2; int i,j; int len1,len2; if(strlen(str1)>strlen(str2)) { s1=str1; s2=str2; len1=strlen(str1); len2=strlen(str2); } else { s1=str2; s2=str1; len1=strlen(str2); len2=strlen(str1); } char *substr=(char *)malloc(256); if(strstr(s1,s2)!=NULL) return s2; for(i=len2-1;i>0;i--) { for(j=0;j<len1;j++) { memcpy(substr,&s2[j],i)); substr[i]='\0'; if(strstr(s1,substr)!=NULL) return substr; } } return NULL; }
方法2:
int GetCommon(char *s1,char *s2,char **r1,char **r2) { int len1=strlen(s1); int len2=strlen(s2); int maxlen=0; for(int i=0;i<len1;i++) for(int j=0;j<len2;j++) { if(s1[i]==s2[j]) { int start1=i,start2=j,count=1; while(start1+1<len1 && start2+1<len2 && s1[start1]==s2[start2]) { start1++; start2++; count++; } if(count>maxlen) { maxlen=count; *r1=s1+i; *r2=s2+j; } } } }
相关文章推荐
- C++中的vector< vector<int> > v(m, vector<int>(n) );是什么意思
- C语言格式化输入输出
- 关于C++中using namespace std
- C++中现成的hash函数
- C++primer第五版第十章学习笔记
- C++ DirectX 游戏开发视频教程 01 资源下载链接
- C语言(C++语言)中##(两个井号)和#(一个井号)用法
- C语言中更改控制台中文字颜色
- 结合C++和GDAL实现shapefile(shp)文件的读取
- C语言中的一些时间函数(time/sleep/clock)
- Win7 下 CDT 工具链的选择
- C++中的强制类型转换
- C++中#include<string>与#include<string.h>的区别
- C语言-设计模式
- C++的Traits
- 《C语言入门经典》Ivor Horton 第九章 练习题
- MFC 控件重绘(1)
- C++中的string、string.h与cstring
- FriendlyARM Tiny210开发板硬件基础 第二篇--汇编调用c语言
- 记录:游戏开发中那些小坑坑