POJ2406 kmp算法next数组-串的最小循环节/循环周期
题目链接:http://poj.org/problem?id=2406
题目大意:问给出的字符串最多由多少个子串相乘得来的。
思路:利用next数组的含义来解。
1.一个串的最小循环节长度:len - next[len]
2.若len%(len-next[len]) == 0, 则这个字符串的最小周期为len/(len-next[len])。一定要注意前提是 len % (len - next[len]) == 0,否则不存在循环周期。
#include<stdio.h>
#include<string.h>
#define mem(a, b) memset(a, b, sizeof(a))
const int MAXN = + ; char s[MAXN];
int s_len, next[MAXN]; void get_next()
{
next[] = -;
int j = , k = -;
s_len = strlen(s);
while(j < s_len)
{
if(k == - || s[j] == s[k])
{
j ++, k ++;
next[j] = k;
}
else
k = next[k];
}
} int main()
{
while(scanf("%s", s) != EOF)
{
if(strcmp(s, ".") == )
break;
get_next();
if(s_len % (s_len - next[s_len]) == )
printf("%d\n", s_len / (s_len - next[s_len]));
else
printf("1\n");
}
return ;
}
POJ2406
POJ2406 kmp算法next数组-串的最小循环节/循环周期的更多相关文章
- poj2406(kmp算法)
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- 第4章学习小结_串(BF&KMP算法)、数组(三元组)
这一章学习之后,我想对串这个部分写一下我的总结体会. 串也有顺序和链式两种存储结构,但大多采用顺序存储结构比较方便.字符串定义可以用字符数组比如:char c[10];也可以用C++中定义一个字符串s ...
- HDU 3613 Best Reward(KMP算法求解一个串的前、后缀回文串标记数组)
题目链接: https://cn.vjudge.net/problem/HDU-3613 After an uphill battle, General Li won a great victory. ...
- poj2185(kmp算法next数组求最小循环节,思维)
题目链接:https://vjudge.net/problem/POJ-2185 题意:给定由大写字母组成的r×c矩阵,求最小子矩阵使得该子矩阵能组成这个大矩阵,但并不要求小矩阵刚好组成大矩阵,即边界 ...
- poj2406(求字符串的周期,kmp算法next数组的应用)
题目链接:https://vjudge.net/problem/POJ-2406 题意:求出给定字符串的周期,和poj1961类似. 思路:直接利用next数组的定义即可,当没有周期时,周期即为1. ...
- 【文文殿下】浅谈KMP算法next数组与循环节的关系
KMP算法 KMP算法是一种字符串匹配算法,他可以在O(n+m)的时间内求出一个模式串在另一个模式串下出现的次数. KMP算法是利用next数组进行自匹配,然后来进行匹配的. Next数组 Next数 ...
- 数据结构之KMP算法next数组
我们要找到一个短字符串(模式串)在另一个长字符串(原始串)中的起始位置,也就是模式匹配,最关键的是找到next数组.最简单的算法就是用双层循环来解决,但是这种算法效率低,kmp算法是针对模式串自身的特 ...
- 转载-KMP算法前缀数组优雅实现
转自:http://www.cnblogs.com/10jschen/archive/2012/08/21/2648451.html 我们在一个母字符串中查找一个子字符串有很多方法.KMP是一种最常见 ...
- KMP算法&next数组总结
http://www.cnblogs.com/yjiyjige/p/3263858.html KMP算法应该是每一本<数据结构>书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年 ...
随机推荐
- Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}
C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...
- JAVA类的无参方法
Java注释: //:单行注释 /**/:多行注释 /** */:JavaDoc注释 方法: ...
- AE开发之shp转txt
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- linux密码忘记的处理步骤
linux忘记密码 centos7忘记密码如何解决?进入到单用户模式下去修改root密码step 1:开机时按住向下箭头,选择第一个,按住e进入gurb界面:step 2:在编辑模式下找ro 修改为 ...
- idea内存不足或过大闪退
昨天在码云找了个开源后台项目https://gitee.com/shuzheng/zheng,各种修改后终于跑起来了, 运行没多久就提示内存不足,安装目录配置虚拟机最大可用内存为512M idea弹窗 ...
- ArcGIS超级工具SPTOOLS-编号工具
1.1 整库更新BSM 输入一个MDB或GDB,将所有的要素类和表,按某个字段BSM,BSM不存在,会自动创建,从某个开始,顺序编号. 1.2 更新BSM 根据自己输入的多个表或要素,可以自己编号 ...
- Programming a Hearthstone agent using Monte Carlo Tree Search(chapter one)
Markus Heikki AnderssonHåkon HelgesenHesselberg Master of Science in Computer Science Submission dat ...
- (六)爬虫之使用selenium
selenium是使用javascript编写,主要用来进行web应用程序测试,在python爬虫中可以用来进行动态网页爬取,解决爬虫中的javascript渲染(执行js语句).总结记录下,以备后面 ...
- ? 这是个很好的问题。Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择。请看 https://golang.org/issue/17969 结束语(Closing notes) 通过研究 Go 垃圾收集器,我能够理解 Go GC 当前结构的背景以及它如何克服它的弱点。Go发展得非常快。如果你对 Go感兴趣,最好继
? 这是个很好的问题.Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择.请看 https://golang.org/i ...
- java基于jcifs.smb实现远程发送文件到服务器
1.服务器指定共享文件夹 1.1.验证服务器共享文件夹本地可以访问: 2.导入依赖的相关jar包 jcifs-1.3.**.jar: <dependency> <gr ...