![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Z-Box
Self-Discipline
在校大学生
展开
-
Codeforces 126B Password(Z-Box or kmp)
题意:你要在一个串中找到“密码”,密码定义为既是前缀,也是后缀,同时在串中间出现过的子串。 分析:字符串匹配经典题,用kmp肯定是可以的,但是最近学了一下Z-Box算法,就练一下,感觉比kmp更好理解,更实用。先预处理处z数组,如何保证前缀也是后缀呢?z[i]==n-i。直观理解上就是以这一位为开始的串有n-i位与前缀相同。就是后缀和前缀相等。那如何保证这一个串在中间也出现过呢?遍历的过程中记录...原创 2019-08-11 07:07:49 · 161 阅读 · 0 评论 -
Codeforces 535D Tavas and Malekas(Z-Box or kmp)
题意:给你一个模式串和原串的长度,并且告诉你模式串再原串中出现的位置,求原串有几种可能。 分析:预处理出z数组。对于有限制的每一个位置,先判断答案是否可行。有两种可能:这个串和前一个串有重合或没有重合。没有重合我们就默认他可以放在这里。如果有重合怎么办呢?前面的z数组就可以派上用场了。计算出重合的长度吗,如果这段长度的后缀和前缀是完全匹配的,那么就可以,否则就是不合法的。如何找出没有限制的位置来...原创 2019-08-11 07:32:07 · 122 阅读 · 0 评论 -
Codeforces 631D Messenger(Z-Box or kmp)
题意:给出两个分别为n,m项的字符串,求第二个字符串在第一个中出现几次,字符串按照(li,ci)的形式给出。(如2-a 2-b 1-c 表示aabbc),n,m<=2e5l<=1e6。 分析:字符串总长度过长,直接匹配比较困难,可以把一个字符串(li,ci)看成一个字母。容易发现,去掉头尾两个二元组的话,中间那些部分必须完全相等才能匹配。采用如下方式构造新串:将文本串(大串)接在去...原创 2019-08-11 08:09:48 · 135 阅读 · 0 评论 -
Codeforces 149E Martian Strings(Z-Box or kmp)
题意:给定一个文本串和多个模式串,问有多少个串能被拆分成恰好两段被匹配到。 分析:比较容易想到的一个题,就当练一下Z-Box。对于每一个模式串,将文本串接在模式串后面,处理出新串的z数组。数组pos[i]表示模式串长度为i的前缀最小被匹配到的位置。然后把模式串和文本串分别反过来,再次匹配,匹配到长度为len-i时判断是否合法即可。参考https://blog.csdn.net/szh_0808/a...原创 2019-08-11 08:21:16 · 198 阅读 · 0 评论 -
Z-algorithm(Z-Box)字符串匹配 算法小结
传送门原创 2019-08-11 08:23:01 · 205 阅读 · 0 评论