两个字符串的最大公共子串

来源:互联网 发布:对流风和穿堂风知乎 编辑:程序博客网 时间:2024/04/28 18:41

今天去面试,面试官出了一道题,求两个字符串的最大公共子串,一听起来不是很难,但让我在纸上写着写着就迷糊了。回来特意写了一下:

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;    }


0 0
原创粉丝点击