LA 3026 && POJ 1961 Period (KMP算法)】的更多相关文章

题意:给定一个长度为n字符串s,求它每个前缀的最短循环节.也就是对于每个i(2<=i<=n),求一个最大整数k>1(如果存在),使得s的前i个字符组成的前缀是某个字符串重复得k次得到的.输出所有的的k和i. 析:首先这是一个KMP的一个题(据大神们说这是一个水题...),首先要对KMP有了解,如果没有了解的先看一下,提供一个地址学习KMP算法, http://www.cnblogs.com/dwtfukgv/articles/5532277.html 对KMP有所了解后,其实这就是一个对…
题意:给一个长度为n的字符串,如果它长度为l(2 <= l <= n)的前缀部分是由一些相同的字符串相接而成,输出前缀的长度l和长度为l时字符串重复的最大次数. 例如字符串为: aaaba.对于长度为2的前缀"aa"来说, “aa”最多由两个‘a’连接而成.对于长度为3的前缀"aaa"来说,“aaa”最多由三个'a'连接而成. 思路:该问题恰好用到了next数组的特性. 在kmp算法中,当字符串匹配失败时,next数组给出模式串接下来要匹配的位置.它的目…
题目: http://poj.org/problem?id=1961 很好的题,但是不容易理解. 因为当kmp失配时,i = next[i],所以错位部分就是i - next[i],当s[0]...s[i]是一个周期串时,i-next[i]显然就是一个循环节,这时(i+1) % (i-next[i]) == 0,(因为下标是从0开始的,所以i+1表示前i个字符,也就是字符个数),判断上式是否为0就可以判断是否是周期串,如果是周期串时,(i+1) / (i-next[i]) 显然就是重复的次数.…
Period Time Limit: 3000MSMemory Limit: 30000K Total Submissions: 12089Accepted: 5656 Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefi…
题目传送门 /* 题意:求一个串重复出现(>1)的位置 KMP:这简直和POJ_2406没啥区别 */ /************************************************ * Author :Running_Time * Created Time :2015-8-10 9:13:24 * File Name :POJ_1961.cpp ************************************************/ #include <cstd…
首先先讲一下KMP算法作用: KMP就是来求在给出的一串字符(我们把它放在str字符数组里面)中求另外一个比str数组短的字符数组(我们叫它为ptr)在str中的出现位置或者是次数 这个出现的次数是可以重叠的 例如:在数组   ababa    中  aba的出现次数-----------它的答案是2------分别是从[0---2]  [2---4] 他们是可以重叠的,但是不可以完全重叠(废话T_T) KMP算法主要有两个模板 1.https://blog.csdn.net/starstar1…
Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23667   Accepted: 9492 Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a member of the Oulipo group. A quote…
本题就是给出非常多对字符串,然后问一个字符串在另外一个字符串出现的次数. 就是所谓的Strstr函数啦. Leetcode有这道差点儿一模一样的题目. 使用KMP算法加速.算法高手必会的算法了. 另外看见讨论说什么使用KMP还超时,最大可能是没有真正理解next table的含义,写了错误的代码,故此尽管自己执行结果正确,可是却没有真正发挥next table的作用.使得算法退化为暴力法了,所以执行正确,但超时. KMP參考: http://blog.csdn.net/kenden23/arti…
http://poj.org/problem?id=1961 题意 :给你一个字符串,让你输出到第几个字符时,循环结的个数. 思路 :这个题和2409差不多,稍微修改一下,加一个循环就行了,用的也是KMP. #include <string.h> #include <stdio.h> #include <iostream> using namespace std ; ; char ch[maxn] ; int next[maxn] ; int main() { int…
Description For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the larges…