随笔分类 -  字符串算法

摘要:要看懂本文可能至少需要知道什么是后缀( 还得知道一些自动机的概念( 和ac自动机有个很大的不同,sam它的字符是放在边上的(似乎放在点上也可以),因为大部分图都是这样的,(比如下图),把点看成了能接受从起点到该点的路径串的状态。 T状态能接受abc和bc字符串。 ( ps:图随手画的) 首先定义一些 阅读全文
posted @ 2018-10-16 22:15 hzhuan 阅读(155) 评论(0) 推荐(0)
摘要:1、KMP 1.1、kmp算法需先对模式串建立fail数组,数组所包含的信息就是比如fail[i]表示前缀s[1...i]的最大border长度。 若 0 ≤ r < |s|, pre(s, r) = suf(s, r), 就称 pre(s, r) 是 s 的 border。 也就是当匹配完第i个字 阅读全文
posted @ 2018-10-08 20:27 hzhuan 阅读(628) 评论(0) 推荐(1)
摘要:https://www.nowcoder.com/acm/contest/147/F 即做4个kmp,可持久化每增加一个字符后的match。 题外话:假如说在a串中找b串,做kmp的过程其实在不断的使b串的前缀与当前匹配到的串的后缀对齐,扫a串,每增加一个字符就更新一次match(最大匹配位置),当 阅读全文
posted @ 2018-09-03 20:55 hzhuan 阅读(159) 评论(0) 推荐(0)
摘要:把一些元素node,通过对其特征的分析,设计哈希函数将其转译成数组下标(或地址)。 key=hash1(node) (node较复杂,则先转为key),a[hash2(key)]. 在竞赛中最直接的用处便是判重和判等价。 1,对大质数取模(最简单的hash函数) a[key%1000000009] 阅读全文
posted @ 2018-04-16 20:07 hzhuan 阅读(125) 评论(0) 推荐(0)
摘要:KMP算法中也涉及到子串与前缀的重复,而扩展KMP算法求得就是字符串S的所有后缀与字符串T的最长公共前缀 可以知道,一个字符串所有的子串便是这个字符串所有后缀的所有前缀(或前缀的后缀 ),那么求的信息其实也是字符串S的所有子串与字符串T前缀的重复 每个后缀的最长公共前缀长度存在一个extend数组中 阅读全文
posted @ 2017-11-25 20:58 hzhuan 阅读(167) 评论(0) 推荐(0)
摘要:可以看出从fail数组中得到最直观的信息是子串与原串前缀的重复 阅读全文
posted @ 2017-11-25 20:26 hzhuan 阅读(193) 评论(0) 推荐(0)