计算重叠最长子串问题
问题:给定两个字符串,求它们前后重叠的最长子串的长度,比如”abcde”和“cdefg”是”cde”,长度为3。
输入:
输入可能包含多个测试案例。
对于每个测试案例只有一行, 包含两个字符串。字符串长度不超过1000000,仅包含字符’a'-’z'。
输出:
对应每个测试案例,输出它们前后重叠的最长子串的长度。
样例输入:
abcde cdefg
样例输出:
3
回答:典型的KMP算法应用。
方法一:
#include <cstdio>
#include <string>
#include <cstring>
#include <ctime>
#include <cstdlib>
#include <map>
#include <queue>
#include <string>
#include <algorithm>
using namespace std;
typedef long long lld;
const int INF=1000000000;
const int MAX=1000005;
int a[MAX];
int b[MAX];
char S[MAX],T[MAX];
void get_fail(char *S,char *T,int n,int m)
{
int i,j=0;
a[0]=m;
while(1+j<m&&T[j]==T[1+j])j++;
a[1]=j;
int k=1;
int need=0;
for(i=2;i<m;i++)
{
need=k+a[k]-i;
if(a[i-k]<need)a[i]=a[i-k];
else
{
j=0>need?0:need;
while(i+j<m&&T[j]==T[j+i])j++;
a[i]=j;
k=i;
}
}
j=0;
while(j<n&&j<m&&S[j]==T[j])j++;
b[0]=j;
k=0;
for(i=1;i<n;i++)
{
need=k+b[k]-i;
if(a[i-k]<need)b[i]=a[i-k];
else
{
j=0>need?0:need;
while(i+j<n&&j<m&&S[i+j]==T[j])j++;
b[i]=j;
k=i;
}
}
}
int main()
{
int n,m;
int last=0;
int i,j,k;
while(scanf("%s%s",&S,&T)!=EOF)
{
n=strlen(S);
m=strlen(T);
get_fail(S,T,n,m);
int ans=0;
for(i=0;i<n;i++)
{
if(b[i]==n-i)
{
ans=b[i];
break;
}
}
printf("%d\n",ans);
}
return 0;
}
方法二:
#include"stdio.h"
#include"string.h"
#define M 1000010
int judge(char *s,char *t,int low,int high){
int index_t = 0;
int len_t = strlen(t);
while(low <= high)
{
if(s[low] != t[index_t]) return 0;
++low;
++index_t;
}
return 1;
}
int main()
{
char s[M],t[M];
int len_s,len_t,i,flag;
while(~scanf("%s%s",s,t))
{
flag = 0;
len_s = strlen(s);
len_t = strlen(t);
i = len_s > len_t ? len_s-len_t : 0;//减少判断,s串短,从0开始判断,s串长,从len_s-len_t位置开始判断。
for(; i < len_s ;++i)
{
if(s[i] == t[0] && judge(s,t,i,len_s -1))
{
printf("%d\n",len_s - i);
flag = 1;
break;
}
}
if(!flag) printf("0\n");
}
return 0;
}
转载于:https://www.cnblogs.com/benchao/p/4516252.html
计算重叠最长子串问题相关推荐
- #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
题目链接 思路 求不可重叠最长重复子串,也可以利用height[i]height[i]height[i]. 二分枚举答案KKK 当height[i]≥Kheight[i] \ge Kheight[i] ...
- 后缀数组--(可重叠最长重复子串问题)
问题描述:给定一个字符串,求最长重复子串,这两个子串可以重叠. 其实问题可以转化为height数组的最大值.至于为什么是这样,我可以这样解释: 求可重叠最长重复子串等价于求两个后缀的最长公共前缀的最大 ...
- 最长可重叠的重复子串(2)
http://www.ahathinking.com/archives/121.html 文章作者: Yx.Ac 文章来源: 勇幸|Thinking ( http://www.ahathinkin ...
- 无重复最长子串python_leetCode 无重复字符的最长子串 python(Longest Substring Without Repeating Characters) python...
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Default 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &quo ...
- python学习3. 无重复字符的最长子串(滑动窗口)
makcooo 2019-04-19 15:47:32 271 收藏 分类专栏: python 版权 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: &quo ...
- LeetCode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)
题目描述 给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. ...
- 文巾解题3. 无重复字符的最长子串
1 题目描述 2 解题思路 以字符串 abcabcbb 为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么其中最长的那个字符串即为答案. 我们列举出这些结果,其中括号中表示选中的字符以及最长 ...
- python练习题:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 题目解析: 有一个字符串,长度不定, 要找出不重复字符串的长度,我们可以这么假设,先找到第一个下标,然后从后面拿到元素的下标对 ...
- 无重复字符的最长子串_滑动窗口
思路: 这道题主要用到思路是:滑动窗口. 其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求.所以,我 ...
最新文章
- Pokémon Go数据收集是否带来隐私问题
- Identifiers in Java(Java标识符)
- 在eclipse中使用hadoop插件
- Java 集合List、Set、HashMap操作二(Map遍历、List反向、Set删除指定元素,集合只读、TreeMap操作、List转Array、List移动元素)
- 台达b2伺服modbus通讯_台达C2000促进油毛毡切割包装机的发展
- 你看过最好的心理学书籍是什么?
- android edittext获取 time值,在Android EditText中实现日期时间选择器(DatePicker和TimePicker)...
- android控件的touch事件_Android touch 事件分发时序
- WebSocket API 学习笔记
- HDLC、PPP、FR原理和配置
- ubuntu14.04安装ANSYS14.5的血泪史
- docker的使用方法
- C#【EF Core框架】使用乐观锁处理并发冲突
- 库尔巴克·莱布勒------KL散度
- java连接ldap服务器_java – LDAP:如何使用连接详细信息验证用...
- [A002]微擎新版本今日头条小程序
- 卫星遥感加持,农业更高效精准
- 2019年寒假 纪中培训总结
- 新加坡环球影城:新加坡亲子游一日游好去处
- 2018-2019 ACM-ICPC沈阳(C,J)
热门文章
- 海康威视错误代码0xf_海康威视嵌入式软件工程师笔试题分享(含解答)
- linux的dhcp的安装,linux下DHCP的安装配置
- mysql5.5 vsftpd_vsftpd-2.0.5+mysql-5.5+pam_mysql构建虚拟用户访问
- Ubuntu18.04安装配置Qt5.15
- Spring教程– Spring Core Framework教程
- struts2 log4j_Struts2和Log4j集成示例项目
- Android BroadcastReceiver示例教程
- dvm与art的区别_Android运行时– DVM与ART,AOT与JIT
- Android Studio 修改项目包名(Xposed)
- 开课吧:Web前端开发三大框架的特点