之前写过kmp的算法,lwl给了我一个模板,现在再写就出问题了,出来挨打!,不过还好发现的及时。
KMP
题意:就是在一个字符串最后添加最少的字符,使得字符串回文。
思路:求一个正序的串,和一个逆序的串,求其中的正向的后缀和逆向的前缀相等的长度最大值,最后先输出正向的串,在输出逆序中最大长度之后的字符。
比如说 正序:abaa,逆序:aaba ,那么最长的长度就是2,为aa,然后就输出abaa ba就好了,可以kmp或者hash求最长的长度。
KMP法(模板拿稳了):
1 |
|
hash留坑吧……
后记:如果是求在任意位置插入任意字符,求插入的最少字符的个数,做法就是区间dp。
扩展KMP
用kmp硬刚扩展kmp算法,我哭了。😭
1 |
|
模板
(感谢清巨orz)
1.KMP
1 | //next[i] 表示t[i-next[i]...i-1]=t[0...next[i]-1] |
2.扩展KMP
1 | //next[i]表示t[i...m-1]与t[0...m-1]的最长公共前缀 |