题意:

求模式串W在母串T中出现的次数,各个匹配串中允许有重叠的部分。

分析:

一开始想不清楚当一次匹配完成时该怎么办,我还SB地让i回溯到某个位置上去。

后来仔细想想,完全不用,直接让模式串向前滑动,即 j = next[j]

 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std; const int maxn1 = + ;
const int maxn2 = + ;
char W[maxn1], T[maxn2];
int next[maxn1]; void get_next(char* W, int l)
{
int k = -, j = ;
next[] = -;
while(j < l)
{
if(k == - || W[k] == W[j])
{
++k;
++j;
next[j] = k;
}
else k = next[k];
}
} int KMP(char* W, int lenw, char* T, int lent)
{
int i = , j = , ans = ;
while(i < lent)
{
if(j == - || T[i] == W[j])
{
++i;
++j;
}
else j = next[j];
if(j == lenw)
{
ans++;
j = next[j];
}
}
return ans;
} int main()
{
//freopen("in.txt", "r", stdin);
int kase;
scanf("%d", &kase);
while(kase--)
{
memset(next, , sizeof(next));
scanf("%s%s", W, T);
int lenw = strlen(W);
int lent = strlen(T);
get_next(W, lenw);
printf("%d\n", KMP(W, lenw, T, lent));
} return ;
}

代码君

最新文章

  1. HTML5 progress和meter控件
  2. 搜狗输入法linux安装 以及 12个依赖包下载链接分享
  3. 《C与指针》读后感
  4. 使用attrs.xml自定义属性
  5. js日期格式化函数
  6. C语言(2)
  7. ICE系列之3对象接口定义语言——slice
  8. PAT 解题报告 1004. Counting Leaves (30)
  9. 转:关于C++14:你需要知道的新特性
  10. ORA-00845: MEMORY_TARGET not supported on this system
  11. jquery 单行滚动、批量多行滚动、文字图片翻屏滚动效果代码
  12. 设置apt-get
  13. 初探JavaScript魅力(五)
  14. 批处理之 for/f 详解
  15. lftp 卡在 Making data connection 解决方法
  16. 《JavaScript总结》js的运行机制
  17. selenium:解决页面元素display:none的方法
  18. Winform开发框架之字段权限控制
  19. 【XAF问题】不能将值NULL插入列&quot;Oid&quot;
  20. 【Python】混合驱动实例

热门文章

  1. centos 虚拟机安装过程
  2. 用windows远程连接linux桌面(使用tightvnc或者tigervnc)
  3. java 几种常见的定时器
  4. POJ3414Pots
  5. Pycharm中的实用功能(网上看到的,感觉还不错)
  6. hdu1017
  7. floodlight 中两个互相矛盾的地方
  8. 李洪强iOS开发之OC[012] -类的声明实现小结
  9. lintcode :搜索旋转排序数组
  10. SaaS系列介绍之十四: SaaS软件开发分析