
kmp
nbl97
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
poj2406 Power Strings(kmp求最小循环节)
题目:求出一个字符串的最小循环节的循环次数。分析:一个字符串的最小循环节就是len - next[len],这个字符串可以是最后一个循环节不完整的。 证明也很简单,把字符串看作是几个最小循环节连起来,最后再连一个循环节的一部分,称这部分叫“小尾巴”。然后next[len]肯定是尽可能长的匹配的,前缀是尽可能多的循环节加一个从循环节中抽出的小尾巴,后缀是尽可能多的循环节加小尾巴。画个图就很明显nex原创 2017-09-07 00:26:20 · 348 阅读 · 0 评论 -
hdu2087 剪花布条(kmp基础变形)
题目:一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?分析:唯一需要注意的是,比如aaaa中找aa,答案是2而并非3。也就是说,找到的子串是不能重叠的。 只需要修改kmp找子串的函数即可,当找到一个后,下次子串直接从0开始,而不是next[j-1]代码:#include <iostream>#inclu原创 2017-09-07 11:16:49 · 233 阅读 · 0 评论 -
poj2752 Seek the Name, Seek the Fame(next数组的理解)
题目:在一个字符串中,输出那些既是后缀又是前缀的字符串的长度。分析:这个题就看next数组理解的深不深刻。 next其实是给字符串划分了对称性,大对称中套着小对称,小对称套着更小的对称。 两段长度为k的值是完全相同的,而两段k中各分为两段后,四段小蓝色部分也是相同的。这是个重要的性质。 nxt[j]就是长度为k的那一截,nxt[k-1]就是其中一截蓝色的。“递归”下去即可。代码:#incl原创 2017-09-08 02:06:59 · 251 阅读 · 0 评论 -
hdu3336 Count the string(next数组)
题目:统计字符串s的所有前缀在s中的出现次数。分析:如果从正面考虑,枚举每个前缀然后找一遍,是O(n^2)的算法,不能接受。 这道题要倒着考虑,利用next数组的性质。任何一个next值都意味着两个相同的前缀和后缀,换句话说,所有的前缀都会在next数组中有所体现。next[i]表示一个以i结尾的既是前缀也是后缀的片段,next[next[i]]也是一个以i结尾的这样的片段,只不过长度更短,以此类原创 2017-09-08 22:18:20 · 221 阅读 · 0 评论 -
hdu3374 String Problem (字符串最小表示)
题目:输出一个字符串的最小表示时起始位置和最大表示时起始位置。并输出有多少个最小表示和最大表示。分析: 循环字符串的最小表示法的问题可以这样描述: 对于一个字符串S,求S的循环的同构字符串S’中字典序最小的一个。 由于语言能力有限,还是用实际例子来解释比较容易: 设S=bcad,且S’是S的循环同构的串。S’可以是bcad或者cadb,adbc,dbca。而且最小表示的原创 2017-09-10 01:03:07 · 186 阅读 · 0 评论