题目

ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法。有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物。ZJM 想知道自己收到的礼物是不是就是她送的,于是想看看自己收到的礼物在纸条中出现了多少次。

Input

第一行输入一个整数代表数据的组数

每组数据第一行一个字符串 P 代表 ZJM 想要的礼物, 包含英语字符 {‘A’, ‘B’, ‘C’, …, ‘Z’}, 并且字符串长度满足 1 ≤ |P| ≤ 10,000 (|P| 代表字符串 P 的长度).
接下来一行一个字符串 S 代表 ZJM 女朋友的纸条, 也包含英语字符 {‘A’, ‘B’, ‘C’, …, ‘Z’}, 满足 |P| ≤ |S| ≤ 1,000,000.

Output

输出一行一个整数代表 P 在 S中出现的次数.

Sample Input

3
BAPC
BAPC
AZA
AZAZAZA
VERDI
AVERDXIVYERDIAN

Sample Output

1
3
0

思路

这个题是一道字符串匹配问题,因此我们可以用到KMP算法,其中next数组的思想十分重要。
next[i]的值为使P[0…i]这个子串的K-真前缀等于K-真后缀的最大的K

代码

#include <iostream>
#include <cstring>
#include <string>
#include <string.h>
#include <algorithm>using namespace std;const int maxn = 10005;
const int maxm = 1000005;
int Next[maxn], res, n;
char p[maxn], s[maxm];void get_next(const char ptr[],int len)
{Next[0] = 0;for (int i = 1, j = 0; i < len; i++){while (j&&ptr[j] != ptr[i])j = Next[j - 1];if (ptr[j] == ptr[i])j++;Next[i] = j;}
}void KMP(const char str[],const char ptr[])
{int len1 = strlen(str), len2 = strlen(ptr), j = 0;get_next(ptr, len2);for (int i = 0; i < len1; i++){while (j&&ptr[j] != str[i])j = Next[j - 1];if (ptr[j] == str[i])j++;if (j == len2){res++;j = Next[j - 1];}}
}int main()
{scanf("%d", &n);while (n--) {memset(p, 0, sizeof(p));memset(s, 0, sizeof(s));memset(Next, 0, sizeof(Next));res = 0;scanf("%s", p);scanf("%s", s);KMP(s, p);printf("%d\n", res);}return 0;
}

WEEK 15 C ZJM 与纸条相关推荐

  1. 第十五周作业——ZJM与纸条

    ZJM与纸条 一.题目 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的 ...

  2. 【Week 15 作业C】ZJM与纸条

    题目描述 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是 ...

  3. ZJM 与纸条(KMP算法)

    问题描述 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是 ...

  4. [week15] C - ZJM与纸条(选做)—— KMP算法

    文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ...

  5. WEEK 15 B ZJM 与生日礼物

    题目 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制编码 ...

  6. SDU程序设计思维实践题目总结

    题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...

  7. [Go实战]golang使用mysql实例和第三方库Gendry

    导入对应的包 // 安装 $ go get github.com/go-sql-driver/mysql// 导入 import ("database/sql"_ "th ...

  8. 【Week 15 作业A】ZJM 与霍格沃兹

    题目描述 ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒], ...

  9. 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组

    /* 这道题要解决两个问题1)状态和状态方程2)怎么保证每走一步,所形成的路径不相交,以保证最后生成的完整路径不相交.(1)状态: dp[i][j][k][l] = 小渊传递的纸条到[i][j]的位置 ...

最新文章

  1. win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃
  2. 每日一皮:无良商家,难怪头发越来越少了!
  3. there are no packages available for installation插件安装问题和如何配置浏览器的快捷键...
  4. SAP如何直接往系统中数据库表插入数据
  5. java反射的工具类的函数集合
  6. 使用JDBC来连接数据库
  7. sql python tableau_Python+SQL+Tableau神组合,金融/咨询/互联网等抢着要的商业分析必备技能!...
  8. 导入别的项目到我的eclipse上出现红色感叹号问题
  9. postgresql  null 值 不受查询条件约束
  10. [转]coolfire黑客入门教程系列之(七)
  11. sqlplus操作命令
  12. 学UI设计要学哪些软件
  13. 超分辨率重建双三次插值Bicubic生成高分辨率图像
  14. 云通信的风险隐患和解决之道——SUBMAIL
  15. axure 侧滑抽屉式菜单_Axure教程之抽屉菜单
  16. 讲给后台程序员看的前端系列教程(17)——文本样式
  17. python的编码 encode
  18. 主流短视频SDK调研对比报告
  19. 我的PPT可以“吐泡泡”!你的可以吗?1分钟教会你怎么做
  20. ros ur5模拟扫描

热门文章

  1. 6. 【containerd】containerd已经停止,containerd-shim还存在?
  2. 关于Spring框架(官方文档)
  3. U盘用哪种格式化比较好?教你一步,详细区分U盘格式
  4. moviepy音视频剪辑:视频半自动追踪人脸打马赛克
  5. Mysqldump原理及使用方法
  6. 发力数字化转型,容智信息携自研创新科技惊艳亮相2021世界人工智能大会
  7. 中英文混合拼音排序(从首字母开始,相同则往下比较)
  8. 找不到启动设备按任意键重新启动计算机,[已解决]硬盘3f0 /找不到启动设备错误...
  9. 项目国际化I18N多语言切换
  10. Android中DNS域名劫持问题-解决方案