面试题-求一个串包含另一个串的最大子串长度的解法
2014-08-31 09:03
253 查看
题目:求串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; //匹配不成功,返回零 }
相关文章推荐
- 面试题12:字符串无重复子串的最大长度
- 一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
- 面试题:最长回文子串(即求对称字符串的最大长度 )
- 一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
- 字符串中最大对称子串的长度(C++软件工程师面试题)
- lc#3求字符串中不包含重复字符的最大长度子串
- 面试题5:求字符串中回文子串的最大长度
- 输入一个数,把它作为一个串,判断其中是否包含长度>=2的相同子串,如 果包含,返回1,不包含,返回0
- 【百度面试题】求包含固定字符集的最短子串
- 蓝桥杯 最大公共子串长度 动态规划 dp
- 《编程之美: 求二叉树中节点的最大距离》的另一个解法
- 字符串中对称子串的最大长度
- 求两个序列的最大公共子序列的长度(递归解法)
- 每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。
- SPOJ NSUBSTR 求每个对应的长度能产生的相同子串的最大个数
- 对称子串的最大长度
- 一个包含正整数和负整数的数组,找出和最大的子串.
- 计算一个字符串中最大的子串的长度,并将它返回。如“abc12345sdfsasdfsd”最大的子串是sdfsasdfsd
- 求一个只包含0,1,-1的数组,和为0的最长子串的长度
- java版最大回文子串的长度(效率优化版)