两个字符串的最大公共子串
来源:互联网 发布:对流风和穿堂风知乎 编辑:程序博客网 时间: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
- 两个字符串的最大公共子串
- 两个字符串的最大公共子串
- 两个字符串的最大公共子字符串
- 两个字符串的最大公共子字符串
- 两个字符串的最大公共子长度
- 两个字符串的最大公共子序列和最大公共子串
- 找出两个字符串的最大公共子串
- LCS求两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 找出两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 编程查找两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- C++实现求两个字符串的最大公共子串
- 算法题-两个字符串的最大公共子串
- 求两个字符串的最大公共子串
- 找出两个字符串的最大公共子串
- 获取两个字符串中最大的公共子串
- 栈链的简单应用
- POJ 3680 Intervals
- poj 2991 Crane(线段树)
- 简单播放音乐的功能
- iOS面试
- 两个字符串的最大公共子串
- 设置打开Finder的快捷键
- IOS UITable 插入和删除的动画
- poj 1847 最短路径的dijkstra算法
- android调用照相机
- 几种保存Hive查询结果的方法
- 数字集成电路设计-13-常用模块集锦
- 如何在socket编程的Tcp连接中实现心跳协议
- 一个关于char在不同平台下 的bug