KMP之GoodLuck!
Good Luck!
Time Limit: 1000MS Memory limit: 65536K
题目描述
我们都知道,前缀就是一个单词的前几个字母(长度小于单词长度);后缀就是一个单词的后几个字母(长度小于单词长度)。例如:Hello,{H,He,Hel,Hell}都是Hello的前缀,{ello,llo,lo,o}都是Hello的后缀。现在,给你一个字符串String,你的任务是找出一个字串s,s既是String的前缀,又是String的后缀,并且s也出现在String的中间部分(既不是前缀,也不是后缀),s的长度越长越好。
输入
输入一个N,接下来N行,每行一个字符串String,String长度len( 1 <= len <= 1000000)。
输出
输出只有一行,如果有符合条件的s,输出长度最长的s,如果没有,输出“Bad Luck!”(不含引号)。
示例输入
3
abcabcabcabcabc
papapapap
aaabaaaabab
示例输出
abcabcabc
papap
Bad Luck!
提示
KMP的题目,首先判断next[l],如果它是0的话 就没有相同前缀与后缀,如果不为0 那么现在next数组里面匹配,如果可以找到与next[l] 相同的数,即证明有中间的与前缀相同,输出。 如果没有 判断next[ next[l] ] ,判断原本的前缀有没有相同的,如果有,减小前缀,可以找到结果
来源
GLSilence
示例程序
#include <stdio.h>
#include <string.h>
char str[1000100] ;
int next[1000100] ;
void getnext()
{int j = 0 , k = -1 , l = strlen(str);next[0] = -1 ;while(j <= l ){if(k==-1 || str[j] == str[k]){j++ ;k++;next[j] = k;}elsek = next[k] ;}/* for(int i=0;i<=l;i++)printf("%d ",next[i]);printf("\n");*/
}
int main()
{//freopen("data1.in","r",stdin);int i , n , l , j , flag ;scanf("%d", &n);for(i = 0 ; i < n ; i++){flag = 0 ;scanf("%s", str);l = strlen(str);getnext();if(next[l]==0){printf("Bad Luck!\n");continue;}for(j = 1 ; j < l ; j++)if(next[j]==next[l]){flag = 1;break;}if(flag){str[ next[l] ] = '\0' ;printf("%s\n", str);}else if(next[ next[l] ]>0){str[next[next[l] ]] = '\0';printf("%s\n", str);}elseprintf("Bad Luck!\n");}return 0;
}
原文:https://blog.csdn.net/winddreams/article/details/19421537
KMP之GoodLuck!相关推荐
- kmp求前缀和后缀的最大重复部分
hdu 2594 kmp水题 求s1的前缀和s2的后缀重复度的最大值 2013-06-05 11:16 1199人阅读 评论(0) 收藏 举报 分类: KMP(8) 版权声明:本文为博主原创文章, ...
- BF算法优化-------KMP算法
百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...
- MUV LUV EXTRA 2019CCPC秦皇岛站J题 KMP
题目链接 题意:意思给你俩数一个字符串,然后让你对字符串小数点后边的字符串进行处理,找个一个循环节以及对应出现的长度, 然后用a*p-b*l算得到一个最大值 那肯定循环节就想到了KMP了,然后循环长度 ...
- 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...
- 字符串匹配算法 -- BM(Boyer-Moore) 和 KMP(Knuth-Morris-Pratt)详细设计及实现
文章目录 1. 算法背景 2. BM(Boyer-Moore)算法 2.1 坏字符规则(bad character rule) 2.2 好后缀规则(good suffix shift) 2.3 复杂度 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
- hiho 1015 KMP算法 CF 625 B. War of the Corporations
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- HDU 1711 Number Sequence(KMP算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 Number Sequence Time Limit: 10000/5000 MS (Java/ ...
- 算法(2)KMP算法
1.0 问题描述 实现KMP算法查找字符串. 2.0 问题分析 "KMP算法"是对字符串查找"简单算法"的优化. 字符串查找"简单算法"是源 ...
最新文章
- UNITY3D拓展编辑器 - 目录
- Thread.Sleep(0) vs Sleep(1) vs Yeild
- javax.validation.ParameterNameProvider
- VC++创建个性的对话框之MFC篇
- 【Prometheus + Grafana】 使用 topk 在 grafana 绘制 前 n 个时间序列
- 四、CI框架之通过URL路径访问C中的函数
- 小米笔记本充电实测追求速度牺牲兼容性小米笔记本充电驱动_是海尔?也是雷神?不足1千克MixBook Air超轻薄笔记本...
- qt 不显示 mysql 数据表中的内容_qt 数据库操作总结
- eclipse安装Hadoop-0.20.2插件
- 文件包含漏洞的审计(审计思路)
- Chrome升级 76.0.3809.87后 GreenChrome无法使用的办法
- three.js 中的矩阵变换及两种旋转表达方式
- 【软件测试】测试用例详解
- 概率论与数理统计(陈希孺)笔记2.2
- php银行学生助学贷款管理系统
- html实现多文件打包下载 (mp4文件)
- 豆子特斯拉,豆箕宁德时代
- 一个页面播放多个视频
- 想从事Python后端开发?如何入门和学习,这篇文章来告诉你。
- 仿微信朋友圈图片点击放大效果