两个字符串的最大公共子串
2014-09-26 21:04
393 查看
今天去面试,面试官出了一道题,求两个字符串的最大公共子串,一听起来不是很难,但让我在纸上写着写着就迷糊了。回来特意写了一下:
1.用C++实现
2.C语言实现
1.用C++实现
#include <iostream> #include <string> using namespace std; void maxstr(string str1,string str2) { int i,j,k; string max,str; for (i=0;i<str1.length();i++) { for (j=0;j<=str1.length();j++) { str=str1.substr(i,j); if(str2.find(str,0)<str2.length()) { if (str.length()>max.length()) { max=str; } } } } cout<<max; } void main() { string str1,str2; cin>>str1>>str2; maxstr(str1,str2); }
2.C语言实现
#include<stdio.h> #include<stdlib.h> #include<string.h> char* longest(char *a,char *b) { int alen = strlen(a); int blen = strlen(b); int i,j,index,max=0,num=0; int start; for(i = 0; i < alen; i++) { for(j = 0; j < blen; j++) { //这里的start1、start2是比较关键的 int start1=i; int start2=j; while((start1 <= alen-1) && (start2 <= blen-1) && (a[start1++] == b[start2++])) num++; if(num > max)//如果num是当前最大匹配的个数,则赋给max,并且在start记下str1最长匹配开始的位置 { max=num; start=i; } num=0;//如果num不是当前最大的,则赋为0值继续循环 } } char *str=(char *)malloc(max + 1); strncpy(str,a + start,max);//从字符串a的start位置开始,拷贝max个字符到str中,这就是我们找出的最大子串 str[max] = '\0'; return str; } int main() { char a[]="abcdabcdcbadffdaccccafg"; char b[]="gfaccccadffdabcdcbadcba"; char *str; str = longest(a,b); printf("%s\n",str); free(str); //之前这里忘记free了,造成内存泄露了 system("pause"); return 0; }
相关文章推荐
- 两个或N个字符串最大公共子串算法
- 求两个字符串的最大公共子串
- 两个字符串的最大公共子串
- 两个或N个字符串最大公共子串算法
- LCS求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 【python】实例-python实现两个字符串中最大的公共子串
- 求两个字符串的最大公共子串【培训第三天】
- java实现字符串匹配问题之求两个字符串的最大公共子串
- 两个或N个字符串最大公共子串算法
- 求两个字符串最大公共子串
- 动态规划算法求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- C++实现求两个字符串的最大公共子串
- 找出两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- (Relax 后缀数组1.4)POJ 2774 Long Long Message(求两个字符串公共子串的最大长度)
- java实现字符串匹配问题之求两个字符串的最大公共子串
- 【字符串操作】 寻找两个字符串中的 最大公共子串