字符串
Evolution__
这个作者很懒,什么都没留下…
展开
-
最长回文子串-manacher算法
像kmp一样,先来看一道题目 给出一个长度为n的字符串S, 求S的子串T,令T反转后T`与T完全相等,求T最大的长度。 首先,可以想到用暴力做,枚举所有的子串,然后判断,时间复杂度为O(N3)O(N^3) 第二,可以发现,如果子串S[1..5]是一个回文串,那么S[2..4]自然也是一个回文串。 利用这个性质,可以枚举所有串的回文中心,然后从中间向两边去查找、判断。 最后的时间复杂度为原创 2016-08-08 07:27:49 · 203 阅读 · 0 评论 -
字符串匹配 KMP算法
首先先来看一个问题,给出两个字符串,S和T 问T在S中出现了多少次,不允许重复,但允许相互有相同部分。 首先想到的肯定是暴力,可以想到,从S的第一个字符开始,看是否和T相等,然后向后移,统计有多少个相等,那么时间就是O(n×m)\text O(n\times m) 当然,这个速度是非常慢的,如果两个串的长度很长,或者有多组数据,自然就超时了。 显然,在匹配的时候,如果遇到不相等的情况,移到下原创 2016-08-06 21:32:51 · 376 阅读 · 0 评论 -
字符串匹配-扩展KMP(Extend-KMP)
首先还是来看看问题: 给出一个长为N的字符串S,再给出一个长为M的字符串T 求S的所有后缀中和T的最长公共前缀 显然可以想到暴力的做法,枚举S所有的后缀,然后和T做匹配,时间复杂度为O(NM)O(NM) 显然,这个方法和之前的暴力一样,都处理了太多的重复操作,那么可以用类似KMP的方法来处理吗? 答案是肯定的,也就是Extend-KMP算法原创 2016-08-08 11:13:27 · 4102 阅读 · 8 评论 -
[对罗穗骞论文的一点理解]后缀数组——倍增算法
基本定义首先先来看几个定义: 字符串的大小比较 从第一位开始,按照字典序比较大小,如果相同则比较后一位,否则按照当前这一位的比较结果确定结果,如果比较的时候这一位已经超出其中一个串的长度,则比较它们的长度,长的一个串比较大,如果长度相等,那么它们也相等。 后缀数组 用SA\text {SA}表示,它是一个一位数组,保存的是所有后缀的排序,每一位表示的就是按照大小排序的这个后缀是从哪一位原创 2016-08-14 16:35:16 · 921 阅读 · 0 评论