POJ 2406题解kmp算法的应用
POJ2406传送门
题目意思:
比如给出一个字符串,让你找出它是由多少个相同子串组成的,输出该子串的最大个数
比如abababab,它是由子串ab重复4次组成的,输出4
abcd它是由子串abcd重复1次组成的,输出1
注:我所用的next数组下标都是从1开始的,字符串数组也是从1开始读取的
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
字符 | a | b | a | b | a | b | a | b | |
next[i] | 0 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
所以答案就是8/(9-7)=4
ac代码:
#include <iostream>
#include <cstring>
#define maxn 1000005
using namespace std;
char s[maxn];
int len;
int nnext[maxn];
void getnext()
{nnext[1]=0;int j=1,k=0;while(j<=len){if(k==0||s[j]==s[k]){k++;j++;nnext[j]=k;}else k=nnext[k];}
}
int main()
{while(scanf("%s",s+1)!=EOF&& s[1]!='.'){if(s[1]=='.') break;int ans=0;len=strlen(s+1);getnext();ans=len/(len+1-nnext[len+1]);if(len%(len+1-nnext[len+1])==0)printf("%d\n",ans);else puts("1");}return 0;
}
有一个小细节需要注意下,while的条件中要写成&& s[1]!='.' 注意中间要有一个空格
或者写成
while(scanf("%s",s+1)!=EOF){if(s[1]=='.') break;
如果写成
while(scanf("%s",s+1)!=EOF&&s[1]!='.')
那么遇到.就不会结束while
POJ 2406题解kmp算法的应用相关推荐
- poj 2406 还是KMP的简单应用
记住KMP是多计算一位的.其中next[i]为不为自身的最大首尾重复子串长度. 位移j=i-next[i]可以看作是构成字符串s的字串(如果i%j==0,存在这样的构成),相应的重复次数 ...
- 字符串匹配经典题目——KMP算法(Leetcode题解-Python语言)
28. 实现 strStr() strStr(haystack: str, needle: str) 的作用就是在 haystack 字符串(长度为 n)中找出 needle 字符串(长度为 m)出现 ...
- poj 4468Spy(kmp算法)
Spy Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- KMP算法详解P3375 【模板】KMP字符串匹配题解
KMP算法详解: KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt(雾)提出的. 对于字符串匹配问题(such as 问你在abababb中有多少个 ...
- POJ 3461 Oulipo(kmp算法解析)
题目链接:https://cn.vjudge.net/contest/320014#problem/F Sample Input 3 BAPC BAPC AZA AZAZAZA VERDI AVERD ...
- KMP算法详解及各种应用
KMP算法详解: KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字.其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题 ...
- 算法笔记--KMP算法 EXKMP算法
1.KMP算法 这个博客写的不错:http://www.cnblogs.com/SYCstudio/p/7194315.html 模板: next数组的求解,那个循环本质就是如果相同前后缀不能加上该位 ...
- 0x15.基本数据结构 — 字符串 (KMP算法(含详细证明)和最小表示法)
目录 一.KMP模式匹配 1.引理: 2.引理证明: 3.使用优化的算法计算nextnextnext数组: 4.luogu P3375 [模板]KMP字符串匹配 5.UVA1328 Period 6. ...
- POJ3461 Oulipo ——KMP算法——Pku3461
建议大家学一学比较巧妙的KMP算法吧,很有意思.推荐个题目:POJ3167 Cow Patterns 题解我会发在本博里. 这个KMP就木有什么好说的了吧,大家找百度百科学一下就可以了~ CODE P ...
- POJ前面的题目算法思路【转】
1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...
最新文章
- pytorch 与 numpy 的数组广播机制
- java中服务器瘫痪怎么办,跑的好好的 Java 进程,怎么突然就瘫痪了
- 字符串多模式精确匹配(脏字/敏感词汇搜索算法)——TTMP算法 之理论(转)...
- Leecode20. 有效的括号——Leecode大厂热题100道系列
- JS ===和==区别
- 即时大数据流处理=即时风暴
- ASP.NET 安全认证(四)
- 吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院
- [Ajax] jQuery中的Ajax -- 03-搜索框提示效果
- MFC开发IM-第二十六篇、vs2008添加库文件
- IntelliJ IDEA 开启很慢,运行不流畅,大项目卡顿?一招配置解决!
- Odoo链接magento纪实
- javascript小技巧(转自DooIT)http://www.cnblogs.com/ttyp/archive/2004/11/15/63900.html
- 排序算法2:冒泡排序
- RS-485接口详解
- 网易推理拼图验证码识别
- VS2013各版本序列号
- App推广及游戏推广,如何才能大规模起量
- 一种高效的Polar码冻结比特编译码方法
- 第一单元 用python学习微积分(五) 隐函数微分法和逆函数导数(上)- 隐函数微分
热门文章
- 点击按钮弹出Outlook(新建邮件状态)
- mysql碎片data free_浅析MySQL数据碎片的产生(data free)
- 比 CMD 更强大的命令行:WMIC 后渗透利用(系统命令)
- 前端封装接口弹出错误_Java:SpringBoot写后端接口,看这一篇就够了
- 数据库—并发调度的可串行性
- React 中setState更新state何时同步何时异步?
- C# MysqlHelper 执行reader时,遇到致命错误或者超时
- RecyclerView Widget 使用
- Windows 2016 减肥
- 语音识别技术突飞猛进 终有一天将超过人