面试题-求一个串包含另一个串的最大子串长度的解法
来源:互联网 发布:电脑语音输入软件 编辑:程序博客网 时间:2024/04/30 09:59
题目:求串text中所包含串test中的最大子串,比如text="abcgfdd",test="hhmcgfp",则最大子串为cgf,长度为3
我的解法如下:
从大到小分别求出text的子串,用kmp比较是否在text中,若在就是最大子串,返回长度,代码如下:
int maxsublength(string s1,string s2){ int ls1=s1.length(); int ls2=s2.length(); int maxsublen=ls1; if(ls2<ls1) maxsublen=ls2; while(maxsublen>0) { for(i=0;i+maxsublen<=ls1;i++) { if(kmp(s2,s1.substr(i,maxsublen))!=0)//是否是子串,是子串则为最大子串 return maxsublen; } --maxsublen; } return 0; }void getnext(string *t,int next[]){ int j,k; j=0;k=-1;next[0]=-1; while(j<t->length()) { if(k==-1||t[j]==t[k])//相等或者是第一个,则加1 { j++;k++;next[j]=k;}//next Else k=next[k]; }//while}int KMPindex(string *s,string *t){ //int stp=t->length(); int next[max]; int i,j; getnext(t,next); i=0;j=0; while(i<s->length()&&j<t->length()) if(j==-1||s[i]==t[j])//对应字符相同,指针后移一个位置 {i++;j++;} else //若不成功从子串的t[next[j]]开始匹配 j=next[j];//while if(j>=t->length()) return i-t->length()+1;//匹配成功返回第一个字符出现的位置 else return 0; //匹配不成功,返回零}
3 0
- 面试题-求一个串包含另一个串的最大子串长度的解法
- 面试题5:求字符串中回文子串的最大长度
- 求最大回文子串的长度
- lc#3求字符串中不包含重复字符的最大长度子串
- 字符串中最大对称子串的长度(C++软件工程师面试题)
- 百度面试题 求字符串中不含重复字符的最长子串长度
- 求符合条件的最大子串的长度
- 求一个字符串的最长不重复子串的最大长度
- Java求字符串的最大子串和长度
- 面试题之求两个字符串的最大公共子串
- 求一个只包含0,1,-1的数组,和为0的最长子串的长度
- 面试题:求一个字符串中连续出现次数最多的子串
- 经典算法学习——求包含某两个字符的最小子串的长度
- 求字符串中不包含重复字符的最长子串的长度
- 面试题2:求子数组的最大和
- 面试题 31: 求子数组的最大和
- 面试题10-- 求子数组的最大和
- 面试题五:求子数组的最大和
- Ubuntu下firefox更新、中文及同步
- 自己手打的模板
- fork() && fork() || fork()
- LuaXml库的编译
- excel 2007 直方图 条图 黑白 条纹填充
- 面试题-求一个串包含另一个串的最大子串长度的解法
- android系统获取系统相关信息(如Android设备的唯一ID等)(源码)
- [unix]指令大全
- 快速排序
- C#获取电脑的相关信息
- MySql常用控制语句
- 内存对齐
- ubuntu安装smb与windows共享文件
- 算法笔记--冒泡排序