/*Name: hdu--1358--PeriodAuthor: shen_渊Date: 20/04/17 10:24Description: 长度/向后移动的位数 = 出现的次数 kmp其实匹配到了第str.size()位,这一位原本是'\0'的,但是由于里面的递推下一位的关系,这一位其实也是匹配了的;
*/
#include<iostream>
#include<cstring>
using namespace std;
void getfail(string);
int f[1000009];
int main(){int n,k = 0;ios::sync_with_stdio(false);//加上之后少了0.5s    700ms-200ms while(cin>>n,n){string str;cin>>str;getfail(str);cout<<"Test case #"<<++k<<endl;for(int i=2; i<=str.size(); ++i){ // 注意i=str.size() if(f[i] > 0 && i%(i-f[i]) == 0){//(i-f[i])是KMP失配函数计算后失配时,向后移动的位数 cout<<i<<" "<<i/(i-f[i])<<endl;}}cout<<endl;}return 0;
}
void getfail(string s)
{memset(f,0,sizeof(f));  //根据其前一个字母得到for(int i=1;i<s.size();i++){int j=f[i];while(j && s[i]!=s[j])j=f[j];f[i+1]=(s[i]==s[j])?j+1:0;}
}

hdu--1358--KMP算法失配函数getfail()的理解--Period相关推荐

  1. KMP算法-next函数介绍

    对于字符串的匹配问题,即在字符串原串中找到子串第一次出现在原串的下标,第一个方案是遍历字符串原串,在每次原串字符偏移时,遍历子串,如果子串可以遍历完成则代表已经找到了子串第一次在原串中出现的位置,返回 ...

  2. KMP算法中next数组的理解与算法的实现(java语言)

    KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...

  3. KMP算法具体解释(转)

    作者:July. 出处:http://blog.csdn.net/v_JULY_v/. 引记 此前一天,一位MS的朋友邀我一起去与他讨论高速排序,红黑树,字典树,B树.后缀树,包含KMP算法,只有在解 ...

  4. 模式搜索的KMP算法详解与C语言代码实现

    Table of Contents 模式搜索的KMP算法 如何更好地理解和掌握 KMP 算法? 推荐文章 Knuth-Morris-Pratt 字符串查找算法,简称为 "KMP算法" ...

  5. KMP算法详解 转帖

    个人觉得这篇文章是网上的介绍有关KMP算法更让人容易理解的文章了,确实说得很"详细",耐心地把它看完肯定会有所收获的--,另外有关模式函数值next[i]确实有很多版本啊,在另外一 ...

  6. 详解KMP算法原理,以及完整java与C++实现

    点击此处学习更多算法与通信知识 作者 | labuladong 来源 | labuladong KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实 ...

  7. kmp算法next计算方法_KMP 算法详解

    KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂. 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解 ...

  8. 【原创】KMP算法详解

    前言 KMP算法是学习数据结构 中的一大难点,不是说它有多难,而是它这个东西真的很难理解(反正我是这么感觉的,这两天我一直在研究KMP算法,总算感觉比较理解了这套算法, 在这里我将自己的思路分享给大家 ...

  9. c语言kmp算法代码,C语言KMP算法的实现

    KMP算法在模式与主串之间存在许多"部分匹配"的情况下,比BF算法快.(注意,接下来的串都是以下标为1作为起始储存位置.) 下面说一下实现代码: 首先是预定义和类型定义: #def ...

最新文章

  1. Linux下磁盘读写优化的分析
  2. JSBridge 技术原理分析
  3. flask urllib上传图片
  4. LeetCode-链表-面试题 02.07. 链表相交
  5. 向大家推荐几本数据库入门的书
  6. 布隆过滤器避免redis缓存穿透
  7. Boost:BOOST_VERIFY扩展的用法测试程序
  8. AVB中将公钥转换成字符数组头文件的实现
  9. python兼容js base64_前端base64编码的坑
  10. python数据可视化雷达图程序_Python数据可视化之matplotlib
  11. 基于ssh的多节点之间互信通信的实现
  12. URL对象中前而几个方法都非常容易理解,而该对象提供的openStream()可以读取该 URL资源...
  13. 异构蜂窝网络K-Tier下行链路的建模与matlab分析
  14. 【国信安实训】——文件上传漏洞
  15. 学之思开源代码学习(1)
  16. 盘点世界顶级五大黑客:个个都是神
  17. 2023阿里云服务器租用价格CPU/内存/带宽/系统盘收费标准
  18. Windows 查看已保存wifi密码
  19. 塔罗牌第五张是什么牌_塔罗占卜你是一个什么样的人?
  20. c语言做出的atm机怎样运行,c语言模拟ATM机界面

热门文章

  1. Android开发应用内多国语言切换
  2. 按文件名数值排序批量打印Excel文件
  3. M201: MongoDB Performance chapter 3 Index Operations学习记录
  4. 软件工程——从艺术走向科学
  5. oracle的.aud文件,OracleASM实例的aud文件问题
  6. android 类似课程表,学生好帮手 Android三款课程表软件横评
  7. 获取psd素材切图快捷键
  8. matlab的图像处理总结,MATLAB--数字图像处理 频域图像分析
  9. Android .9.png图片的制作与使用
  10. STM32 寄存器位操作详解