
字符串
THE___BEST
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
后缀数组小模板 POJ 2774
模板题,把俩串连起来求后缀数组,通过height数组解 当模板用咯 #include #include #include #include #include const int maxn = 200000 + 7; int cmp(int *r, int a, int b, int l) { return (r[a] == r[b]) && (r[a + l] == r[b原创 2016-06-03 00:45:12 · 423 阅读 · 0 评论 -
字典树(Tire树)
引:假如有n(n很大)个字符串,有q个查询,每个查询表示在这n个串里面是否存在这个要查询的串。一种方法就是直接暴力查找,但是复杂度很高,稍微优化一点的方法是先把n个串排序,然后二分查找,但复杂度仍可以优化,hash或者字典树都可以,这里介绍字典树。字典树是一颗树,每个节点都有多个子节点,子节点的数量取决于字符的范围,比如如果只有小写字母子节点就有26个就足够了,例如对于这六个字符串:ab, ada,原创 2016-08-30 17:45:33 · 653 阅读 · 1 评论 -
AC自动机
问题:有多个单词,然后给出一个较长的字符串,问有多少个单词出现在这个字符串里面。这里要用到的就是AC自动机,AC自动机需要KMP和字典树知识,最好把这两样都弄懂了。 AC自动机其实就是字典树里面再加一个fail指针,这个fail指针的用处就是当当前字符无法被匹配时所要进行的转移,很想KMP算法里面的next数组,比如对于单词:qwert, wert, ert所构成的字典树如下:(世上最丑作图。。丑原创 2016-09-25 23:13:31 · 640 阅读 · 0 评论 -
KMP算法
KMP算法是一个快速的字符串匹配算法,比如要在字符串s中判断是否存在字符串t,最最简单的算法就是暴力的搜一遍,但是暴力的复杂度太高,最坏达到了O(n*m)(n是s的长度,m是t的长度)的复杂度,在n m都较大的情况下暴力算法很耗时间。而kmp算法可以大大优化复杂度,可以达到O(n+m)的复杂度。 KMP算法的核心是求出next数组,next数组就是在进行匹配某一位置的字符时如果匹配失败的话所进行的原创 2016-09-23 20:19:52 · 385 阅读 · 0 评论