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算法相关推荐

  1. hihocoder 1015 : KMP算法(kmp)

    传送门 Description 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一只河蟹,于是河蟹就向小H ...

  2. hiho 1015 KMP算法 CF 625 B. War of the Corporations

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  3. hiho一下 第三周 Hiocoder #1015 : KMP算法

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  4. hihoCoder week3 KMP算法

    题目链接 https://hihocoder.com/contest/hiho3/problems kmp算法 #include <bits/stdc++.h> using namespa ...

  5. (hiho一下第三周)#1015 KMP算法 【模版】

    题目1 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程 ...

  6. hihoCoder 1015 (KMP模板题)

    题目链接:http://hihocoder.com/problemset/problem/1015 Time Limit:1000ms Case Time Limit:1000ms Memory Li ...

  7. (HihoCoder - 1015)From hihoCoder

    (HihoCoder - 1015)From hihoCoder 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他 ...

  8. hiho一下 第三周---KMP算法

    KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上 ...

  9. BF算法优化-------KMP算法

    百度百科:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的核心是利用 ...

最新文章

  1. 计算机组装与维修说课稿,大班《生活中的数字》说课稿
  2. python的Web编程
  3. linux-用户管理190919
  4. 6-2 多项式求值 (15 分)
  5. 一次900万+数据量的 SQL 查询优化分析【上百倍性能优化】
  6. c语言中extern关键字_了解C语言中的extern关键字
  7. 企业传播的云计算时代还有多远?―21世纪广告―文章摘要―龙源期刊网
  8. mysql 判断大小_《fantasy系列》高性能mysql(一)
  9. 【数学建模】相关软件
  10. 【翻译】AdaIN:Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization
  11. 你应该知道的原型图工具Mockplus(摩客)
  12. 常吃西红柿治疗十种病以及食用的一些禁忌
  13. QListWidget自定义item的两种方式(二)——使用QWidget作为item
  14. 2021年安全员-A证(江西省)报名考试及安全员-A证(江西省)考试平台
  15. 人工智能在脑神经科学的应用创新与热点——脑机接口
  16. 读书笔记 | 资本的秘密
  17. 分享两个在线制图网站
  18. JavaScript-快速入门
  19. 360网站卫士 PHP-DOS攻击脚本专杀工具使用笔记
  20. 白细胞膜囊泡包裹在金纳米粒表面|DNA纳米结构的细胞膜囊泡|靶向细胞膜的多肽药物外泌体纳米载药

热门文章

  1. 关于Javaweb部署到linux服务器产生乱码?的原因分析
  2. #1407 : 后缀数组二·重复旋律2 (不可重叠最长重复子串问题)
  3. CF B. Working out
  4. 重新安装mysql5.7.21_linux 安装mysql 5.7.21详解以及安装过程中所遇问题解决
  5. kafka的key为null时如何存储
  6. [NOTE] WebGoat v8.2.2学习笔记
  7. CentOS 7 的 32 位版发布
  8. I/O复用函数的使用——select
  9. c语言迭代法求平方根_求平方根问题 (C++ 实现)
  10. 上海出租车价格计算方法