博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3461 Oulipo(模式串在主串中出现的次数)
阅读量:6264 次
发布时间:2019-06-22

本文共 1342 字,大约阅读时间需要 4 分钟。

题目链接:http://poj.org/problem?id=3461

题意:给你两个字符串word和text,求出word在text中出现的次数

思路:kmp算法的简单应用,遍历一遍text字符串即可,当前匹配的字符数达到word字符串的长度,即可确定word字符串出现一次了。

code:

1 #include 
2 #include
3 using namespace std; 4 const int MAXM = 10005; 5 const int MAXN = 1000005; 6 char word[MAXM]; 7 char text[MAXN]; 8 int next[MAXM]; 9 void GetNext()10 {11 int len = strlen(word);12 int i = 0;13 int j = -1;14 next[0] = -1;15 while (i < len)16 {17 if (-1 == j || word[i] == word[j]) next[++i] = ++j;18 else j = next[j];19 }20 }21 22 int Kmp()23 {24 int i = 0;25 int j = 0;26 int ret = 0;27 int tlen = strlen(text);28 int wlen = strlen(word);29 while (i < tlen)30 {31 if (-1 == j || text[i] == word[j])32 {33 ++i;34 ++j;35 if (j == wlen)36 {37 ++ret;38 j = next[j]; // 已经匹配成功,重新定位j指向word中的位置39 }40 }41 else j = next[j];    // 失配时,重新定位j指向word中的位置42 }43 return ret;44 }45 46 int main()47 {48 int nCase;49 scanf("%d", &nCase);50 while (nCase--)51 {52 scanf("%s %s", word, text);53 GetNext();54 printf("%d\n", Kmp());55 }56 return 0;57 }

 

转载于:https://www.cnblogs.com/ykzou/p/4460412.html

你可能感兴趣的文章
Centos6快速yum lamp
查看>>
eucimage
查看>>
仿途牛导航
查看>>
CentOS 6.5下快速搭建ftp服务器[转]
查看>>
iOS多线程
查看>>
关于控制台程序和Win32程序
查看>>
JavaScript之tab面板切换
查看>>
Android自定义组件系列【3】——自定义ViewGroup实现侧滑
查看>>
08 分析函数
查看>>
Python日记——运算符和基础数据类型剖析
查看>>
What is a TensorFlow Session?
查看>>
Struts简介和配置
查看>>
编程疑难杂症の无法剔除的神秘重复记录
查看>>
传输方式
查看>>
Linux 进程间通信
查看>>
当鼠标点击label文字是光标跳到相应的input中
查看>>
mysql
查看>>
使用 IDEA 创建多模块项目
查看>>
java多态
查看>>
ffmpeg编译常规大全
查看>>