FZUOJ-2128 最长子串(strstr函数枚举暴力)
来源:互联网 发布:python apscheduler 编辑:程序博客网 时间:2024/06/06 03:20
FZUOJ Problem-2128 最长子串(枚举)
accept: 183 submit: 669 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里,求不包含s1,s2…sn的最长串,输出长度。话不多说,看案例:
原串:lgc–str–aightla–long–ahisn—stree—–t
长度: 3 – s1 — 7 —— s2 —- 5—- s3 - s4 - 1
可以看出其中最长的是:tr aightla lon 共 12 (去掉了第一个str的’s’和long的’g’)
其他案例:
asdasasdsa
2
as
das
4
sadasdas
2
q
w
8
但是,注意最后一个案例,如果Sn并不被S包含,那么母串S就最长串。
由于输出的是长度,求sta和结束end的下标,开始是自己模拟敲的,但是Time Exceed(n^2)= =!!
for(i=0;i<strlen(s); i++){//判断子串 time exceed!!! flag = 1; for(j=0; s1[j]!='\0'; j++){ if(s1[j]!= s[i+j]){ flag = 0; break; } } if(flag){ per[count].sta = i; per[count++].end = j+i-1; i = i+j-1; } }
百度大神们的是strstr()返回子串的S1在S位置,就枚举一一;再sort/qsort按sta排序。
计算长度的主要公式的是: SunSum[count] = per[i].end - per[i-1].sta - 1;然后求max,上代码:
#include"iostream"#include"cstring"#include"cstdio"#include"algorithm"using namespace std;char s[1000005];struct node { int sta; int end;}per[1000005];int cmp(node a,node b){ return a.sta<b.sta;}int main(){ int flag; int i,j,k,n,max,count,sum; char s1[160]; while(gets(s)){ cin>>n; getchar(); count = 0; for(k=0; k<n; k++){//n次输入 gets(s1); i = 0; while(strstr(s+i,s1)!=NULL) { j = strstr(s+i,s1)-s; per[count].sta = j; per[count].end = strlen(s1)+j-1; i = per[count].end; count++; } } per[count].sta = per[count].end = strlen(s); sort(per,per+count+1,cmp);// for(int i=0;i<=count;i++){// printf("%d=>%d %d\n",i,per[i].sta,per[i].end);// } sum = per[0].end - 1; max = max>sum?-1:sum; for(i=1; i<=count; i++){ sum = per[i].end - per[i-1].sta-1; max = max>sum?max:sum; } if(!count)cout<<strlen(s)<<endl; //S中不存在Sn把S输出 else cout<<max<<endl; }
- FZUOJ-2128 最长子串(strstr函数枚举暴力)
- fzu Problem 2128 最长子串 (注意strstr函数的使用)
- 最长对称子串——暴力枚举+注意细节
- 最长回文子串(暴力法)
- POJ-3080 -求n个字符串最长公共子串-暴力枚举
- 子串查询函数strstr
- 最长公共子串,暴力做法(补充中...)
- 字符串的(暴力)枚举连续子串1
- 字符串的(暴力)枚举连续子串2
- 最长公共子串 暴力法
- 最长回文子串 【朴素算法(枚举)】
- 编程实现strstr子串函数
- POJ-3080---Blue Jeans (strstr函数暴力求解)
- poj 3080(3450) KMP(暴力也能过) 多个串的最长公共子串
- 最长公共子串问题(方法一:暴力+RK匹配,方法二:DP+空间优化)
- 求解最长回文子串的暴力求解
- L2-008. 最长对称子串----暴力+dp+Manacher
- 最长公共子串(1)--hdu1238(多个字符串得最长公共子串--暴力)
- Android 增强版百分比布局库 为了适配而扩展
- 汇编指令【下】
- android.hardware.camera2使用指南
- latex学习3:教你如何在word中像LaTex那样打公式
- jquery的html,text,val
- FZUOJ-2128 最长子串(strstr函数枚举暴力)
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(1)——一切都是对象
- XUtils net
- 树状数组
- android开发之SearchView
- 阅读STL源码剖析笔记 —— 迭代器概念
- Z字形扫描
- Redis监控工具—Redis-stat、RedisLive
- 在Ubuntu平台下编译比特币bitcoin客户端