poj3461:http://poj.org/problem?id=3461

题意:求一个串在另一个串中出现的次数。

题解:直接套用KMP即可,在统计的时候做一下修改。找到之后不是直接返回,而是移动i-(j-next[j])位。

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#define N 1000005
using namespace std;
int next[N];
char s1[N],s2[N];
int len1,len2,ans;
void getnext(int plen){
int i = ,j = -;
next[] = -;
while( i<plen ){
if(j==-||s1[i]==s1[j]){
++i;++j;
if(s1[i]!=s1[j] )
next[i] = j;
else
next[i] = next[j];
}
else
j = next[j];
}
}
void KMP(){
getnext(len1);
int i = ,j = ;
while (i<len2&&j<len1){
if( j == - || s2[i] == s1[j] ){
++i;
++j;
}
else {
j = next[j]; }
if( j==len1 ){//找到一个匹配串之后,不是在原来串中往后移动一位,而是移动i-(j-next[j]);
ans++;
j=next[j];
}
}
}
int main(){
int k;
scanf("%d",&k);
while(k--){
scanf("%s%s",s1,s2);
len1=strlen(s1);
len2=strlen(s2);
ans=;
KMP();
printf("%d\n",ans);
}
}

最新文章

  1. 【转】输入/输出流 - 全面掌握IO
  2. 59-chown 简明笔记
  3. 邮件格式(HTML/TXT),TXT为文本邮件
  4. Python之路-python数据类型(列表、字典、字符串、元祖)操作
  5. UITableView自定义单元格
  6. WINIO64位模拟键鼠操作
  7. 9 个用于移动APP开发的顶级 JavaScript 框架【申明:来源于网络】
  8. PXC中的GTIDs
  9. git checkout -b mybranch和git checkout mybranch
  10. 用Javascript,DHTML控制表格的某一列的显示与隐藏
  11. 02 爬虫数据解析之re,xpath,beautifulsoup
  12. DevExpress ASP.NET Bootstrap Controls v18.2新功能详解(二)
  13. 項目当中使用的easyui的模板crud页面
  14. 了解Queue
  15. Serial-mcu
  16. Tree Constructing CodeForces - 1003E(构造)
  17. VSS_01
  18. Plot Candlestick Charts in Research of quantopian
  19. c++ 判断容器是否为空
  20. 分享一些JAVA常用的学习网站

热门文章

  1. Demon_背包系统(实现装备栏,背包栏,可以切换装备)
  2. [转] 关于c++的头文件依赖
  3. iOS 如何优雅的处理“回调地狱Callback hell”(一) (上)
  4. Python之路,Day16 - Django 进阶
  5. sql server 2008 评估期已过期
  6. ASP.NET-FineUI开发实践-13(一)
  7. MD5算法的使用
  8. EXPDP IMPDP 知识总结
  9. ASP.NET Core中使用Razor视图引擎渲染视图为字符串
  10. jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程