1.

KMP模版:

代表题目:POJ 3641 Oulipo KMP http://blog.csdn.net/murmured/article/details/12871891

char P[MAXN],T[MAXM];
int f[MAXN],n,m,ans;
void getFail()
{
f[0]=f[1]=0;
int j;
for(int i=1;i<n;i++)
{
j=f[i];
while(j && P[i]!=P[j])
j=f[j]; if(P[i]==P[j])
j++; f[i+1]=j;
}
} void kmp()
{
int j=0;
for(int i=0;i<m;i++)
{
while(j && P[j] != T[i])
j=f[j]; if( T[i]==P[j])
j++; if(j==n)
{
ans++; }
}
}

2.

KMP求周期

代表题目: POJ 2406 Power Strings KMP求周期http://blog.csdn.net/murmured/article/details/12868211

LA 3026 - Period KMP http://blog.csdn.net/murmured/article/details/12675953

HDU 3746 Cyclic Nacklace KMP http://blog.csdn.net/murmured/article/details/12859607

len%(len-next[i])==0

此字符串的最小周期就为len/(len-next[i]);

下面摘自http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html

-----------------------

-----------------------

k   m        x      j      i

由上,next【i】=j,两段红色的字符串相等(两个字符串完全相等),s[k....j]==s[m....i]

设s[x...j]=s[j....i](xj=ji)

则可得,以下简写字符串表达方式

kj=kx+xj;

mi=mj+ji;

因为xj=ji,所以kx=mj,如下图所示

-------------

-------------

k  m        x     j

看到了没,此时又重复上面的模型了,kx=mj,所以可以一直这样递推下去

所以可以推出一个重要的性质len-next[i]为此字符串的最小循环节(i为字符串的结尾),另外如果len%(len-next[i])==0,此字符串的最小周期就为len/(len-next[i]);

3.

前缀后缀

字符查找过程中,会有一个状态值j,这个j表示s2已经匹配了s1多少个字符

HDU 2594 Simpsons’ Hidden Talents KMP     http://blog.csdn.net/murmured/article/details/12867995

POJ 2752 Seek the Name, Seek the Fame      http://blog.csdn.net/murmured/article/details/12870805

HDU 3336 Count the string KMP+DP               http://blog.csdn.net/murmured/article/details/12858343

最新文章

  1. WCF中的错误及解决办法
  2. Mysql 关键字及保留字
  3. Jboss7.1 加入realm auth认证 bootsfaces 美化的登录页面
  4. MSMQ 学习(1)
  5. PHPWind 8.7中代码结构与程序执行顺序
  6. CoreBluetooth - 中心模式
  7. java web 学习(2)
  8. UVA 11478 Halum (差分约束)
  9. UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming&lt;Problem G&gt;
  10. ThinkPHP - 组织分类结构
  11. maven 构建web项目index.jsp报错
  12. 从0开始的Python学习012数据结构&amp;对象与类
  13. codeforces158C
  14. Vertica系列: Vertica DB连接负载均衡
  15. tidb 架构 ~Tidb学习系列(5)
  16. 使用Ztree新增角色和编辑角色回显
  17. easyui datagrid 三层嵌套
  18. ZJOI2019day1退役记
  19. SecureCRT常用快捷键
  20. Androidn Notification的使用,解决找不到setLatestEventInfo方法

热门文章

  1. MATLAB —— 编程基础
  2. css--两行显示省略号兼容火狐浏览器
  3. C++异常实现与longjmp, setjmp,栈指针EBP, Active Record
  4. 下载新浪android SDK
  5. 【Android Studio探索之路系列】之六:Android Studio加入依赖
  6. Dcloud课程8 开心一刻应用如何实现
  7. php中类的持久化如何实现
  8. BZOJ2118: 墨墨的等式(最短路构造/同余最短路)
  9. BZOJ2631: tree(LCT)
  10. 【代码】Django学习笔记