##题目描述 给你一个字符串,让你判断这个字符串的前缀是不是由一个字串重复而组成的,如果有求出所有前缀串的长度和重复次数。 ##分析 因为重复这个概念我们在kmp算法里面提到过,next数组,有印象么,那么根据后缀函数的定义我们把这个串往后移,错位部分的长度就等于i-f[i],f数组就相当于与kmp ...
分类:
其他好文 时间:
2020-07-03 23:14:50
阅读次数:
65
给你一个长度为 $n$ 的长字符串,完美子串既是它的前缀也是它的后缀,求完美子串的个数且统计这些子串的在长字符串中出现的次数。 ...
分类:
其他好文 时间:
2020-07-03 21:13:13
阅读次数:
50
##基本介绍 KMP算法是一种用于字符串匹配的算法,网上关于kmp的介绍很多,也十分复杂,(其实我也没怎么搞懂)。首先我们还是考虑朴素的匹配,暴力枚举匹配起点,遇到不匹配的点,就直接退出,进行下一个起始点开始的一轮匹配,这样的复杂度是平方级别的。但是kmp算法考虑的问题是,我们在这样的匹配过程中,会 ...
分类:
编程语言 时间:
2020-07-02 21:35:06
阅读次数:
68
gate 用时:反正挺久的 给定长度为$n$的字符串和整数$k$,问每个前缀能否拆成$ABABA$($B$可以为空,即$AAAAA$)($k+1$个$A$)的形式。 设$AB$为$S$,则$A$为$S$的前缀。 问题转化为拆成$SSSSA$或$SSSSS$ \(KMP\),通过$fail$数组可以求 ...
分类:
其他好文 时间:
2020-07-01 23:45:27
阅读次数:
62
gate 一年前做的. 求一个字符串由多少个循环节构成. KMP. 结论:若$n % (n-next[n]) \not= 0$则不是由循环节构成的. 否则,答案为$n/(n-next[n])$. code #include<cstdio> #include<iostream> #include<cm ...
分类:
其他好文 时间:
2020-07-01 09:51:14
阅读次数:
65
引入 现在我们面临这样一个问题:有一个主串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢? Brute-Force(暴力求解) 思路 如果用暴力匹配的思路,并假设现在主串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即$S_i = P_$),则$i++,j++ ...
分类:
编程语言 时间:
2020-06-30 22:38:23
阅读次数:
70
KMP算法原理 http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/ ...
分类:
其他好文 时间:
2020-06-30 17:31:21
阅读次数:
67
快排的划分,归并排序的归并,之后的kmp都是双指针算法。 双指针算法的两大类: 指向两个区间或指向一个区间 双指针算法一般是这样的 双指针算法运用了某些单调性质,可以将暴力的O(n^2)优化到O(n) 先来一个小的问题热身,输入一行若干个用空格隔开的单词,然后依次每行输出一个单词。具体应用看这里ht ...
分类:
其他好文 时间:
2020-06-30 10:56:43
阅读次数:
44
字符串 KMP算法 前言 KMP,作为字符串的入门算法,还是比较有难度的。起码当初我尝试理解KMP的时候,就花了整整一个上午去翻阅各种博客。虽然每一篇博客在理解之后再去看会发现说得都挺有道理,但是在云里雾里的时候,并不是所有的博客都能一语点破雾水。 特将学习体会记录下来(>人<;) KMP用来干什么 ...
分类:
编程语言 时间:
2020-06-30 00:56:26
阅读次数:
71
字符串 扩展kmp 1.1 引例 扩展kmp,求解如下问题: 问s串与t串的每一个后缀的最长公共前缀 容易发现:当某一个最长公共前缀等于s串的长度的时候,其实就是一个s串与t串的kmp匹配问题,因此得名“扩展”kmp。事实上,扩展kmp与普通kmp有一定的区别,两者并不是完全是拓扑关系。即使完全没学 ...
分类:
其他好文 时间:
2020-06-30 00:19:38
阅读次数:
73