最长子串

Accept: 130    Submit: 516
Time Limit: 3000 mSec    Memory Limit : 65536 KB

 Problem Description

问题很简单,给你一个字符串s,问s的子串中不包含s1,s2...sn的最长串有多长。

 Input

输入包含多组数据。第一行为字符串s,字符串s的长度1到10^6次方,第二行是字符串s不能包含的子串个数n,n<=1000。接下来n行字符串,长度不大于100。

字符串由小写的英文字符组成。

 Output

最长子串的长度

 Sample Input

lgcstraightlalongahisnstreet 5 str long tree biginteger ellipse

 Sample Output

12

思想:算出每一个字符串在字符串s中出现的位置,即记录出现的起点位置和终点位置。并用一个结构体数组存储下来,然后按终点位置进行排序,字符串s的终点看做是一个为0 的串,即mark[].s=mark[].e=l;最后从左到右,每后一个终点减去前一个起点再减一,记录长度,重复上述操作,取最大的长度,则为题目所求的最大子串长度。

代码如下:
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define M 0x3f3f3f3f
using namespace std;
char a[1000010];
struct stu
{   int s;
int e;
}mark[1000010];
char b[110];
int per[110];
int k;
int cmp(stu a,stu b)
{
if(a.e==b.e)return a.s<b.s;
else return a.e<b.e;
}
void get_m()
{
int i=0;
int j=0;
int l1,l2;
l1=strlen(a);
l2=strlen(b);
while(i<l1)
{
if(j==-1||a[i]==b[j])
{
i++;j++;
if(j==l2)
{
mark[k].e=i-1;
mark[k].s=i-l2;
k++;
}
}
else j=per[j];
}
}
void kmp()
{
int i=0;
int j=-1;
int l=strlen(b);
per[i]=j;
while(i<l)
{
if(j==-1||b[i]==b[j])
{
i++;
j++;
per[i]=j;
}
else j=per[j];
}
}
int main()
{
int n;
while(scanf("%s",a)!=EOF)
{
int l1=strlen(a);
scanf("%d",&n);
k=0;
for(int i=0;i<n;i++)
{
scanf("%s",b);
kmp();
get_m();
}
sort(mark,mark+k,cmp);
int len=0;
int l=0;
mark[k].e=mark[k].s=l1;
for(int i=0;i<=k;i++)
{
if(mark[i].e-l>len)len=mark[i].e-l;
l=mark[i].s+1;
}
printf("%d\n",len);
}
return 0;
}

fuz--2128(最长子串)相关推荐

  1. Problem 2128 最长子串(kmp+strstr好题经典)

     Problem 2128 最长子串 Accept: 134    Submit: 523 Time Limit: 3000 mSec    Memory Limit : 65536 KB  Prob ...

  2. 最长子串(FZU2128)

    最长子串 Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  3. 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)

    一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  4. leetcode--无重复字符的最长子串--python

    文章目录 题目 题目详情 示例 解题代码 思路 代码 运行结果 最佳方案 题目 题目详情 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 输入: "abcabcbb& ...

  5. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  6. 【每日一算法】无重复字符的最长子串

    微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...

  7. 汇编语言求无符号数组中出现的次数最多数_【今日最佳leecode通俗易懂】无重复字符的最长子串...

    相信看了这个标题的同学,对这道题以已经非常不陌生了,就是leecode当中的第三题,之所以要单独的写一写主要对我来说,里面涉及到有一个滑动窗口, 散列表, 字符编码等知识点比较重要,也有几个小技巧,这 ...

  8. 大二菜鸟———无重复字符的最长子串

    这是一枚大二菜鸟的成长反思博客   终于忍不住,在这六月将之的一天开始写起了博客.数据结构计算机算法杂七杂八学了一堆但是都只是浅尝,觉得还是要写博客反刍学习到的知识.   感谢大佬 @Java3y 的 ...

  9. 无重复最长子串python_leetCode 无重复字符的最长子串 python(Longest Substring Without Repeating Characters) python...

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Default 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &quo ...

  10. 算法---------至少有K个重复字符的最长子串(Java版本)

    题目 找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k .输出 T 的长度.示例 1:输入: s = "aaabb", k = 3输 ...

最新文章

  1. 会说话的狗狗本电脑版_会说话的电脑有点酷!惠普星14帮你解锁“偷懒”新姿势_惠普 星 14 2020(i5 1135G7/16GB/512GB/MX450)_笔记本新闻...
  2. RHEL5+ImageMagick-6.4.0-0+jmagick-6.4.0+resin 解决方案
  3. MVC用非Entity Framework将数据显示于视图(二)
  4. Markdown语法记录
  5. 【Paper】2014_多智能体系统一致性问题研究_唐骥宇
  6. WebStorm 和 VsCode 的结合体来了!
  7. form提交php怎么接收不到,php form表单post提交获取不到数据,而使用get提交能获取到数据 的解决办法...
  8. 多线程lambda数据捕获
  9. 从数据表中取出第n条到第m条的记录的方法
  10. 个人知识管理系统Version1.0开发记录(07)
  11. SAP Brazil J1BTAX 为税收例外创建税收组(翻译)
  12. 第六届中国电子信息博览会今日正式开幕,智享新时代!
  13. 【历史上的今天】11 月 14 日:微软发布 PowerShell;彼得·诺顿出生;Firefox 更换内核
  14. java sql 搜索拼音
  15. vtd和vt的区别_英语中v,vi,vt有什么区别
  16. 物美集团携手SAP ERP项目成功上线(转)
  17. 关于电容、电阻并联接地
  18. 家庭宽带真的还有意义么?
  19. 深度学习在人脸识别中的应用 ——优图祖母模型的“进化”
  20. 500 字写一篇程序员的个人发展计划

热门文章

  1. gfsj (logmein)
  2. linux xmanager使用教程,Xmanager企业版中各软件功能简介
  3. Web在线打印设计器即将推出,像Excel一样在线设计模板
  4. 《系统集成项目管理》第七章 项目范围管理
  5. linux vnc登陆,vnc登陆,4个步骤教你vnc登陆Linux
  6. 设置WIN 7 截图工具的快捷方式
  7. 那个三本的程序员妹子,凉了
  8. 7-2 群发邮件 (20 分)
  9. Windows预览体验计划空白等一些问题的解决办法
  10. Golang线程池gpool