hdu 2087 剪花布条(KMP)
来源:互联网 发布:汉字听写大赛软件 编辑:程序博客网 时间:2024/04/27 19:23
题意:KMP算法统计主串中包含模式串的个数,模式串在主串中不可重叠。
如:s="aaaaaa" t="aa" 则t在s中出现3次,而不是5次。需在每次成功匹配后t的指针重新指向从串首。
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;#define MAXN 10005//字符串长度char W[MAXN];char T[1000005];int _next[MAXN];void GetNext(char t[]) //求next数组{ int j,k,len; j=0;//从0开始,首先求_next[1] k=-1;//比较指针 _next[0]=-1;//初始值-1 len=strlen(t); while(j<len) { if(k==-1||t[j]==t[k]) //指针到头了,或者相等 { ++j; ++k; _next[j]=k;//此句可由优化替代 /*优化(求匹配位置时可用) if(t[j]!=t[k])_next[j]=k; else _next[j]=_next[k]; //*/ } else k=_next[k]; }}int KMPCount(char s[],char t[]) //统计子串在主串中的出现次数,可重叠{ int i,j,lens,lent,cnt; i=j=0; lens=strlen(s); lent=strlen(t); cnt=0; while(i<lens) { if(j==-1||s[i]==t[j]) { ++i; ++j; } else j=_next[j]; if(j==lent) { ++cnt;//每当成功匹配,则计数 j=0;//匹配成功后,j置0,防止计算重叠的串。 } } return cnt;}int main(){ while(~scanf("%s",T)) { if(T[0]=='#') break; scanf("%s",W); GetNext(W); printf("%d\n",KMPCount(T,W)); } return 0;}
0 0
- HDU 2087 剪花布条 kmp
- HDU 2087 剪花布条(KMP)
- HDU 2087 剪花布条 KMP
- hdu 2087 剪花布条(KMP)
- HDU 2087 剪花布条 裸KMP
- HDU 2087 剪花布条 KMP
- hdu 2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP)
- HDU 2087 剪花布条(KMP:贪心)
- HDU-2087 剪花布条(kmp)
- HDU 2087 剪花布条 KMP入门
- HDU 2087 剪花布条 //简单kmp
- hdu 2087 剪花布条 KMP
- HDU 2087 剪花布条 KMP题解
- hdu 2087 剪花布条(数据结构:KMP)
- hdu 2087 剪花布条 KMP
- HDU - 2087 剪花布条 (KMP)
- hdu 2087 剪花布条 KMP
- 基础练习 Huffuman树(贪心算法)
- BWT (Burrows–Wheeler_transform) 解码分析
- matlab下 rgb2hsi(图片路径) 函数代码
- HDU-5583-Kingdom of Black and White【2015上海赛区】【暴力】
- select管道通信
- hdu 2087 剪花布条(KMP)
- 老徐谈谈软件测试职业的现状,以及市场情况
- linux学习笔记(一)--linux系统的安装
- BZOJ 3720: Gty的妹子树|树分块
- hdu 5504 GT and sequence(思维,逻辑,脑洞)
- poj 2785
- 运行时数据区域
- alpha版、beta版、rc版的意思
- POJ 3321 (DFS序)