hihocoder #1015 : KMP算法
hihocoder.com 上的KMP算法题,搞了半天在VS2012是能通过的,提交上去就是有问题,反复改终于通过了,记录在此,以下是测试通过代码。
输入
第一行一个整数N,表示测试数据组数。
接下来的N^2行,每两行表示一个测试数据。在每一个测试数据中,第一行为模式串,由不超过10^4个大写字母组成,第二行为原串,由不超过10^6个大写字母组成。
其中N<=20
输出
对于每一个测试数据,按照它们在输入中出现的顺序输出一行Ans,表示模式串在原串中出现的次数。
样例输入
5
HA
HAHAHA
WQN
WQN
ADA
ADADADA
BABABB
BABABABABABABABABB
DAD
ADDAADAADDAAADAAD
样例输出
3
1
3
1
0
1 #include<iostream> 2 //vs2012里用#include<string>即可,G++非要让用.h,原因是strlen()在G++里定义在string.h头文件里,不常用G++,折腾半天 3 #include<string.h>using namespace std; 4 void kmpNext(char* pattern, int m, int* p){ 5 p[0] = 0; 6 int k = 0; 7 for(int i = 1; i < m; i++){ 8 while(k > 0 && pattern[k] != pattern[i]){ 9 k = p[k-1]; 10 } 11 if(pattern[k] == pattern[i]){ 12 p[i] = ++k; 13 }else{ 14 p[i] = 0;//k == 0 15 } 16 } 17 } 18 int kmp(char* str, int start, char* pattern, int k, int m, int *p){ 19 // int k = 0; 20 int i = start; 21 while(str[i] != '\0'){ 22 while(k > 0 && str[i] != pattern[k]) k = p[k-1]; 23 if(str[i] == pattern[k]){ 24 k++; 25 if(k == m) return i - m + 1; 26 } 27 i++; 28 } 29 return -1; 30 } 31 int match(char* str, char* pattern, int m, int *p){ 32 int ret = 0; 33 int i = 0; 34 int k = 0; 35 while(str[i] != '\0'){ 36 int idx = kmp(str, i, pattern, k, m, p); 37 if(idx == -1) break; 38 ret++; 39 k = p[m-1]; 40 i = idx + m; 41 } 42 return ret; 43 } 44 int main(){ 45 int N; 46 cin >> N; 47 char pattern[10001]; 48 char str[1000001]; 49 int p[10001]; 50 // char *pattern = new char[10001]; 51 // char *str = new char[1000001]; 52 // int *p = new int[10001]; 53 for(int i = 0; i < N; i++){ 54 //getline(cin, pattern[i]); 55 //getline(cin, str[i]); 56 cin >> pattern; 57 cin >> str; 58 int m = strlen(pattern); 59 kmpNext(pattern, m, p); 60 int num = match(str, pattern, m, p); 61 cout<<num<<endl; 62 } 63 // delete []pattern; 64 // delete []str; 65 // delete []p; 66 }
转载于:https://www.cnblogs.com/poweryong/p/4448670.html
hihocoder #1015 : KMP算法相关推荐
- hihocoder 1015 : KMP算法(kmp)
传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一只河蟹,于是河蟹就向小H ...
- hiho 1015 KMP算法 CF 625 B. War of the Corporations
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- hiho一下 第三周 Hiocoder #1015 : KMP算法
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- hihoCoder week3 KMP算法
题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...
- (hiho一下第三周)#1015 KMP算法 【模版】
题目1 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程 ...
- hihoCoder 1015 (KMP模板题)
题目链接:http://hihocoder.com/problemset/problem/1015 Time Limit:1000ms Case Time Limit:1000ms Memory Li ...
- (HihoCoder - 1015)From hihoCoder
(HihoCoder - 1015)From hihoCoder 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他 ...
- hiho一下 第三周---KMP算法
KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上 ...
- BF算法优化-------KMP算法
百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...
最新文章
- 计算机组装与维修说课稿,大班《生活中的数字》说课稿
- python的Web编程
- linux-用户管理190919
- 6-2 多项式求值 (15 分)
- 一次900万+数据量的 SQL 查询优化分析【上百倍性能优化】
- c语言中extern关键字_了解C语言中的extern关键字
- 企业传播的云计算时代还有多远?―21世纪广告―文章摘要―龙源期刊网
- mysql 判断大小_《fantasy系列》高性能mysql(一)
- 【数学建模】相关软件
- 【翻译】AdaIN:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
- 你应该知道的原型图工具Mockplus(摩客)
- 常吃西红柿治疗十种病以及食用的一些禁忌
- QListWidget自定义item的两种方式(二)——使用QWidget作为item
- 2021年安全员-A证(江西省)报名考试及安全员-A证(江西省)考试平台
- 人工智能在脑神经科学的应用创新与热点——脑机接口
- 读书笔记 | 资本的秘密
- 分享两个在线制图网站
- JavaScript-快速入门
- 360网站卫士 PHP-DOS攻击脚本专杀工具使用笔记
- 白细胞膜囊泡包裹在金纳米粒表面|DNA纳米结构的细胞膜囊泡|靶向细胞膜的多肽药物外泌体纳米载药
热门文章
- 关于Javaweb部署到linux服务器产生乱码?的原因分析
- #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
- CF B. Working out
- 重新安装mysql5.7.21_linux 安装mysql 5.7.21详解以及安装过程中所遇问题解决
- kafka的key为null时如何存储
- [NOTE] WebGoat v8.2.2学习笔记
- CentOS 7 的 32 位版发布
- I/O复用函数的使用——select
- c语言迭代法求平方根_求平方根问题 (C++ 实现)
- 上海出租车价格计算方法