fzu Problem 2128 最长子串(KMP + strstr 经典好题)
Problem Description
Input
输入包含多组数据。第一行为字符串s,字符串s的长度1到10^6次方,第二行是字符串s不能包含的子串个数n,n<=1000。接下来n行字符串,长度不大于100。
字符串由小写的英文字符组成。
Output
Sample Input
lgcstraightlalongahisnstreet str
long
tree
biginteger
ellipse
Sample Output
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2128
*************************************************
题意:
分析:利用strstr()函数将每个字串在原串中的首尾位置存储一下,再将首尾从小到大排一下序。
AC代码:
判题oj炸了,,,wait...
*:
kmp代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX(x,y)(x>y?x:y)
const int MAXN=;
char mstr[MAXN];
char str[];
struct Node{
int s,e;
};
Node area[MAXN];
int cmp(const void *a,const void *b){
if((*(Node *)a).e!=(*(Node *)b).e)return (*(Node *)a).e-(*(Node *)b).e;
else return (*(Node *)a).s-(*(Node *)b).s;
}
int p[],top;
void getp(){
int i=,j=-;
p[]=-;
while(str[i]){
if(j==-||str[i]==str[j]){
i++;j++;
p[i]=j;
}
else j=p[j];
}
}
void kmp(){
getp();
int i=,j=;
while(mstr[i]){
if(j==-||mstr[i]==str[j]){
i++;j++;
if(!str[j])area[top].s=i-j,area[top++].e=i-;
}
else j=p[j];
}
}
int main(){
int N;
while(~scanf("%s",mstr)){
top=;
scanf("%d",&N);
for(int i=;i<N;i++){
scanf("%s",str);
kmp();
}
int ans=;
int n=strlen(mstr),t=,temp;
area[top].s=n;area[top].e=n;
qsort(area,top+,sizeof(area[]),cmp);
//for(int i=0;i<=top;i++)printf("%d %d\n",area[i].s,area[i].e);
for(int i=;i<=top;i++){
temp=area[i].e-t;
ans=MAX(ans,temp);
t=area[i].s+;//注意*****
}
printf("%d\n",ans);
}
return ;
}
fzu Problem 2128 最长子串(KMP + strstr 经典好题)的更多相关文章
- Problem 2128 最长子串(kmp+strstr好题经典)
Problem 2128 最长子串 Accept: 134 Submit: 523Time Limit: 3000 mSec Memory Limit : 65536 KB Probl ...
- FZU 2128 最长子串
题目链接:最长子串 思路:依次找出每个子串的在字符串中的首尾地址,所有子串先按照尾地址从小到大排序.然后首地址从小到大排. 遍历一遍每个子串的首地址和它后面相邻子串的尾地址之差-1, 第一个子串的首地 ...
- 福州大学第十届校赛 & fzu 2128最长子串
思路: 对于每个子串,求出 母串中 所有该子串 的 开始和结束位置,保存在 mark数组中,求完所有子串后,对mark数组按 结束位置排序,然后 用后一个的结束位置 减去 前一个的 开始 位置 再 减 ...
- Uva 12012 Detection of Extraterrestrial 求循环节个数为1-n的最长子串长度 KMP
题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=3163">点击打开链接 题意: ...
- 算法练习之合并两个有序链表, 删除排序数组中的重复项,移除元素,实现strStr(),搜索插入位置,无重复字符的最长子串
最近在学习java,但是对于数据操作那部分还是不熟悉 因此决定找几个简单的算法写,用php和java分别实现 1.合并两个有序链表 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两 ...
- 最长子串(FZU2128)
最长子串 Time Limit:3000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 九度OJ 1535 重叠的最长子串
重叠的最长子串 http://ac.jobdu.com/problem.php?pid=1535 时间限制:1 秒 内存限制:128 兆 题目描述: 给定两个字符串,求它们前后重叠的最长子串的长度,比 ...
- [getLongestLength] 加和为0的最长子串长度
点击这里查看原文 假设一个数组仅仅由1和-1组成,求该数组的和为0的最长子串的长度. 例如: {1,-1,1,-1,1,1,1} 输出:4. 昨天机试的时候做到这道题,不会做,今天思考一下. 普通的解 ...
- D - Milk Patterns (出现k次可重复的最长子串的长度)
题目链接:https://cn.vjudge.net/contest/283743#problem/D 题目大意:给你n个数,然后问你出现m次的最长子串的长度. 具体思路:和上一篇博客的内容差不多,这 ...
随机推荐
- 在VisualStudio中显示当前的分支名
当项目多的时候,当分支多的时候,当会议多的时候. 你打开VS,你是否犹豫过,"我现在是打开的哪个分支?!!!!??!" 如果你米有犹豫过,是否有过,"FXXXXK, 我怎 ...
- 当我们在谈论kmeans(5)
本系列意在长期连载分享,内容上可能也会有所删改: 因此如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/(暂时公式显示有问题) 其他: ...
- Linux教学辅助训练(第二阶段)
linux教学辅助训练(第二阶段) 标签(空格分隔):Linux辅助训练 ---更多资料点我查看 提示:本阶段性练习题是对<实战教学笔记>相应章节知识的归纳与扩展部分,必须要会,是面试前必 ...
- web页面在微信里打开,字体颜色不正常显示
问题:写的web项目在微信里的webview里打开(iphone手机),会出现颜色的不识别.写的是白色,数字的部分会过了3-5秒后,变成黑色! 原因:在iphone手机里,数字的部分(具体的长度没有测 ...
- cocos2d-x中DrawNode常见的图像绘制函数
//绘制矩形 ('起始点' , '目标点' , '填充颜色') auto rect=DrawNode::create(); rect->drawRect(Vec2(0,0),Vec2(100, ...
- python-微博模拟登陆
微博的的模拟登陆是比较坑的,看了网上很多大神的帖子,自己又看了微博的登陆时的json数据:1.发现登陆时在输入账号时用chrome可以看到会有一个prelogin之类的网址,网址后面会有大串的随机数. ...
- SublimeText快捷键
在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. ...
- ubuntu 16.04安装mips交叉编译
1. 在 /etc/apt/sources.list 文件末尾添加下面的更新源: deb http://ftp.de.debian.org/debian squeeze main deb http:/ ...
- JS 高效快速的数组去重
Array.prototype.uniquer = function() { var result = [], hash = {}; ; i < this.length; i++) { if ( ...
- 【Time系列五】个性时钟与秒表升级版
从昨天到现在,一直在研究这个看起来超级简单的时钟.界面非常简洁大方. 虽然是简单,可是这个对齐的问题还是把我整得一塌糊涂.谁叫作者不解释清楚的. 参考:http://bbs.fishc.com/thr ...