WEEK 15 C ZJM 与纸条
题目
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 与纸条相关推荐
- 第十五周作业——ZJM与纸条
ZJM与纸条 一.题目 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的 ...
- 【Week 15 作业C】ZJM与纸条
题目描述 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是 ...
- ZJM 与纸条(KMP算法)
问题描述 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是 ...
- [week15] C - ZJM与纸条(选做)—— KMP算法
文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ...
- WEEK 15 B ZJM 与生日礼物
题目 ZJM 收到了 Q老师 送来的生日礼物,但是被 Q老师 加密了.只有 ZJM 能够回答对 Q老师 的问题,Q老师 才会把密码告诉 ZJM. Q老师 给了 ZJM 一些仅有 01 组成的二进制编码 ...
- SDU程序设计思维实践题目总结
题目来源及链接 题目名称及讲解博客链接 涉及算法 原题以及原题链接 第二周作业 Maze BFS POJ-3984 Pour water BFS POJ-1606 第二周实验 化学 模拟 codefo ...
- [Go实战]golang使用mysql实例和第三方库Gendry
导入对应的包 // 安装 $ go get github.com/go-sql-driver/mysql// 导入 import ("database/sql"_ "th ...
- 【Week 15 作业A】ZJM 与霍格沃兹
题目描述 ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒], ...
- 棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组
/* 这道题要解决两个问题1)状态和状态方程2)怎么保证每走一步,所形成的路径不相交,以保证最后生成的完整路径不相交.(1)状态: dp[i][j][k][l] = 小渊传递的纸条到[i][j]的位置 ...
最新文章
- win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃
- 每日一皮:无良商家,难怪头发越来越少了!
- there are no packages available for installation插件安装问题和如何配置浏览器的快捷键...
- SAP如何直接往系统中数据库表插入数据
- java反射的工具类的函数集合
- 使用JDBC来连接数据库
- sql python tableau_Python+SQL+Tableau神组合,金融/咨询/互联网等抢着要的商业分析必备技能!...
- 导入别的项目到我的eclipse上出现红色感叹号问题
- postgresql null 值 不受查询条件约束
- [转]coolfire黑客入门教程系列之(七)
- sqlplus操作命令
- 学UI设计要学哪些软件
- 超分辨率重建双三次插值Bicubic生成高分辨率图像
- 云通信的风险隐患和解决之道——SUBMAIL
- axure 侧滑抽屉式菜单_Axure教程之抽屉菜单
- 讲给后台程序员看的前端系列教程(17)——文本样式
- python的编码 encode
- 主流短视频SDK调研对比报告
- 我的PPT可以“吐泡泡”!你的可以吗?1分钟教会你怎么做
- ros ur5模拟扫描
热门文章
- 6. 【containerd】containerd已经停止,containerd-shim还存在?
- 关于Spring框架(官方文档)
- U盘用哪种格式化比较好?教你一步,详细区分U盘格式
- moviepy音视频剪辑:视频半自动追踪人脸打马赛克
- Mysqldump原理及使用方法
- 发力数字化转型,容智信息携自研创新科技惊艳亮相2021世界人工智能大会
- 中英文混合拼音排序(从首字母开始,相同则往下比较)
- 找不到启动设备按任意键重新启动计算机,[已解决]硬盘3f0 /找不到启动设备错误...
- 项目国际化I18N多语言切换
- Android中DNS域名劫持问题-解决方案