【Week 15 作业C】ZJM与纸条
题目描述
ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法。有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物。ZJM 想知道自己收到的礼物是不是就是她送的,于是想看看自己收到的礼物在纸条中出现了多少次。
输入格式
第一行输入一个整数代表数据的组数
每组数据第一行一个字符串 P 代表 ZJM 想要的礼物, 包含英语字符 {‘A’, ‘B’, ‘C’, …, ‘Z’}, 并且字符串长度满足 1 ≤ |P| ≤ 10,000 (|P| 代表字符串 P 的长度).
接下来一行一个字符串 S 代表 ZJM 女朋友的纸条, 也包含英语字符 {‘A’, ‘B’, ‘C’, …, ‘Z’}, 满足 |P| ≤ |S| ≤ 1,000,000.
输出格式
输出一行一个整数代表 P 在 S中出现的次数.
样例输入
3
BAPC
BAPC
AZA
AZAZAZA
VERDI
AVERDXIVYERDIAN
样例输出
1
3
0
思路
KMP算法
作用
判断字符串P是否为字符串S的子串即字符串匹配问题
暴力解法
记n=len(S),m=len§,枚举i=0,1,…,n-m,将S[i,i+m]与P比较,复杂度为O(nm)
KMP优化
上述暴力算法中每次比较失败,后移一位继续比较,KMP跳过那些绝不可能成功的字符串比较,尽量减少比较的趟数。
核心:next数组
next[i]的值为使P[0…i]这个子串的K-真前缀等于K-真后缀的最大的K
每次匹配失败后,若再P[r]匹配失败,则对于P[0…r-1]这一段前next[r-1]个字符一定与后next[r-1]个字符相同,则可用长度next[r-1]的前缀替代当前比较的后缀,让P[next[r-1]]这个字符对准刚刚匹配失败的地方进行下一次匹配。
代码
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char ptr[10005];
char str[1000005];
int Next[10005];
void getnext(char*pstr,int len)
{Next[0]=0;for(int i=1,j=0;i<len;i++){while(j&&pstr[i]!=pstr[j])j=Next[j-1];if(pstr[i]==pstr[j])j++;Next[i]=j;}
}
int KMP(char*str,char*ptr)
{int len1=strlen(str);int len2=strlen(ptr);int cnt=0;getnext(ptr,len2);for(int i=0,j=0;i<len1;i++){while(j&&str[i]!=ptr[j]) j=Next[j-1];if(str[i]==ptr[j])j++;if(j==len2){cnt++;j=Next[j-1];}}return cnt;
}
int main(int argc, char** argv) {int T;scanf("%d",&T);while(T--){scanf("%s",ptr);scanf("%s",str);int ans=KMP(str,ptr);printf("%d\n",ans);}return 0;
}
【Week 15 作业C】ZJM与纸条相关推荐
- 第十五周作业——ZJM与纸条
ZJM与纸条 一.题目 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的 ...
- 网络安全2020.6.15作业
网路安全2020.6.15作业 Windows的发展路程: Windows1.0是微软1983年发布的,只能用dos来操作 Windows2.0是1987年上市的,增强了键盘和鼠标,加入功能表和对话框 ...
- WEEK 15 C ZJM 与纸条
题目 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是她送 ...
- 【Week 15 作业A】ZJM 与霍格沃兹
题目描述 ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒], ...
- ZJM 与纸条(KMP算法)
问题描述 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ZJM 的女朋友 想给 ZJM 送生日礼物.ZJM 想知道自己收到的礼物是不是就是 ...
- [week15] C - ZJM与纸条(选做)—— KMP算法
文章目录 题意 Input Output 输入样例 输出样例 提示 分析 总结 代码 题意 ZJM 的女朋友是一个书法家,喜欢写一些好看的英文书法.有一天 ZJM 拿到了她写的纸条,纸条上的字暗示了 ...
- 【渝粤教育】电大中专电商运营实操 (15)作业 题库
1.目前菜鸟网络依赖大数据和云计算已实现了哪些功能( ) A.智能分单 B.自动化仓库 C.以上都正确 D.智能发货 E.物流云加速 错误 正确答案:左边查询 学生答案:E 2.目前( )的电子商务呈 ...
- week15作业A ZJM 与霍格沃兹
ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也可能是对 ...
- 程序设计思维与实践 Week15 作业A - ZJM 与霍格沃兹
题意: ZJM 为了准备霍格沃兹的期末考试,决心背魔咒词典,一举拿下咒语翻译题 题库格式:[魔咒] 对应功能 背完题库后,ZJM 开始刷题,现共有 N 道题,每道题给出一个字符串,可能是 [魔咒],也 ...
最新文章
- 大脚本运行常见问题总结
- java方法里执行两条sql_Java如何在数据库上执行多个SQL命令?
- centos创建禁止登录用户
- EF 5.0 帮助类 增删改查
- 有趣设计工作室创始人段先洲:UI设计师的名利场
- k8s控制器:DaemonSet
- 基于mykernel完成多进程的简单内核
- three20 TTTableViewController + TTActionSheetController
- mysql 小写null 大写null_mysql中的null字段值的处理及大小写问题
- Oracle查询重复数据
- 计算机网络协议各协议的作用,计算机网络通信协议有哪些?作用是什么?
- Java基础——常用对象API(4):集合框架5:Map集合
- 爽!Android模拟器可以运行ARM应用了
- 10秒钟搞定圆柱齿轮设计所有课题
- 为什么安卓手机没有苹果手机流畅?
- 驾驶证学法减分助手小程序源码(带搭建视频教程)
- 音频标准AES的一点理解
- JS监听手机物理返回键(及IOS微信端的bug)
- Python控制Excel表格的操作以及问题处理
- 门窗软件测试自学,AutoCAD 2014室内装潢设计完全自学手册[9787111482352]