HDU 1358字符串循环节问题 ,next数组
来源:互联网 发布:java中策略模式 编辑:程序博客网 时间:2024/04/29 19:12
求字符串循环节,要求每前i个字符串前缀是否循环,有的话打印出来。
我对j=next[i]数组(未优化,从0开始,第一个为-1,)理解:字符s[i]的前面的字符串,最长的相同的前缀和后缀
的长度,因此,i+1-next[i+1]刚好是最小循环单位(如果next[i+1]%(i+1-next[i+1)==0)(假设不是最小的,那么相同前后缀必然不是最大),
我对j=next[i]数组(未优化,从0开始,第一个为-1,)理解:字符s[i]的前面的字符串,最长的相同的前缀和后缀
的长度,因此,i+1-next[i+1]刚好是最小循环单位(如果next[i+1]%(i+1-next[i+1)==0)(假设不是最小的,那么相同前后缀必然不是最大),
而next[i+1]/(i+1-next[i+1])+1,是循环的个数(+1是加开头上那一段),
-------------------i
--------------
---------------i
next【i】从计算到s.size()(包括)。
#include<iostream>#include<cstdio>#include<string>using namespace std;int next[1000001];void get_next(string s) { next[0]=-1; //第一个为-1 int i=0;int j=-1; while(i<s.size()) { if(j==-1||s[i]==s[j]) { i++;j++; next[i]=j; } else j=next[j]; }}int main(){ int n;string s; int tc=1; while(cin>>n&&n) { printf("Test case #%d\n",tc); tc++; cin>>s; get_next(s); for(int i=1;i<n;i++) { if(next[i+1]>0&&next[i+1]%(i+1-next[i+1])==0) { printf("%d %d\n",i+1,next[i+1]/(i+1-next[i+1])+1); } } cout<<endl; }}
0 0
- HDU 1358字符串循环节问题 ,next数组
- HDU 1358 Period(next数组+周期+循环节)
- HDu 1358 Period(Next 数组找循环节)
- KMP算法next数组的循环节问题
- KMP算法-next数组的应用-循环节问题
- 【kmp算法next数组-串的最小循环节/循环周期】Period HDU
- hdu 1358 next数组应用
- HDU 1358 Period (next跳表找最小循环节)KMP
- (KMP 1.4)hdu 3746 Cyclic Nacklace(使用next数组来求循环节的长度——求一个字符串需要添加多少个字符才能使该字符串的循环节的个数>=2)
- kmp的next数组的运用(求字符串的最小循环节)
- poj 1961(next数组的循环节)
- [2747]循环节(next数组) SDUT
- KMP next数组求最小循环节
- (KMP 1.5)hdu 1358 Period(使用next数组来求最小循环节——求到第i个字符的循环节数)
- HDU 3746 Cyclic Nacklace 利用 KMP的next数组求循环节
- hdu 3749 Cyclic Nacklace(kmp next数组获取循环节)
- HDU 3746 字符串匹配(字符串的最小循环节问题)
- 【next数组应用】HDU 1358 Period
- FS_S5PC100平台上Linux Camera驱动开发详解
- 如何查看linux的文件系统block size
- 编程之美热身赛题目1 : 传话游戏 Java实现
- SQL Error: 1064, SQLState: 42000数据库异常
- 第二题 求数组中和最大的子数组和其对应的位置
- HDU 1358字符串循环节问题 ,next数组
- ReportStudio入门教程(十三) - 列表的复杂表头之隐藏
- VC++6.0——》error LNK2001: unresolved external symbol __beginthreadex
- 树状数组优化 之 uva299
- Wireshark抓包工具使用教程以及常用抓包规则
- startActivityForResult()、onActivityResult()和setResult()使用
- 权限管理——RBAC模型总结
- grdblend---错误
- lua基础(二)