
KMP
hesorchen
这个作者很懒,什么都没留下…
展开
-
KMP算法详解
前言 KMP具体的算法思路在这篇博客中已经提及。 这么多天没看,手打KMP都有点费劲,不过在回想算法思路的过程中,感觉对代码的理解提升了一个层次。下面就按照KMP模板,对代码进行讲解。 代码详解 注释1: nxt数组,nxt[i]表示字符串str前i个字符前缀的最大前缀后缀公共长度。 注释2: 预处理nxt数组是KMP算法的前提。 注释3: k表示j-1的最大前后缀公共长度,也即nxt[j-1]。但是如果j-1的下一次不能成功匹配,也就是str[j]和str[k]不一样,那么k就回溯,这时候的k不再表示nx原创 2020-08-02 12:02:39 · 5714 阅读 · 0 评论 -
HDU1358KMP求循环节
直接说结论吧,KMP算法的前提是预处理一个next数组,一个字符串长度为len,那么这个字符串的最小循环节就是len-nxt[len]。 因此有: 判断一个字符串是否完全循环可以用 (len%(len-nxt[len]))==0,并且nxt[len]!=0 该题中询问的是在末尾补上几个字符串可以使字符串完全循环,那么就用最小循环节(len-nxt[len])- 最末尾多余的字符个数(nxt[len]%最小循环节)即可 AC代码: /* * @Author: hesorchen * @Date: 20原创 2020-07-12 18:26:30 · 5299 阅读 · 0 评论 -
HDU2087,1686 KMP
剪花布条 Oulipo 这两题都是统计一个字符串中另一个字符串的数量,只不过一题可以重叠,另一题不能重叠。 在代码上出了输入格式,也就是一个语句的区别,其实就是找到了一个文本串和模式串匹配的子串之后,是不是从模式串开头重新找的区别。 第一题AC代码: /* * @Author: hesorchen * @Date: 2020-07-02 22:19:34 * @LastEditTime: 2020-07-11 12:49:56 * @Description: https://hesorchen.gi原创 2020-07-11 13:00:26 · 5247 阅读 · 0 评论 -
HDU1711
HDU 1711 KMP裸题了,只不过把字符改成数字。 /* * @Author: hesorchen * @Date: 2020-07-02 22:19:34 * @LastEditTime: 2020-07-11 12:36:53 * @Description: https://hesorchen.github.io/ */ #include <map> #include <set> #include <list> #include <queue>原创 2020-07-11 12:42:10 · 5336 阅读 · 0 评论 -
KMP字符串匹配算法
今天刚学KMP,做点输出,一方面查找漏洞,加深理解,另一方面帮助大家学习。 应用场合 给你两个字符串nnn,mmm,问你在nnn是否包含mmm 例如n="abcabdabcabc",m="abcabc"n="abcabdabcabc",m="abcabc"n="abcabdabcabc",m="abcabc" 朴素解法思想 朴素解法:将m与n逐个对比 从头对比 n| a b c a b d a b c a b c m| a b c a b c ^(指针) 对比到下面这一步时发现不同 n原创 2020-07-10 23:04:12 · 5417 阅读 · 0 评论