程序设计思维与实践 Week15 作业

2023-05-16

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


思路:
暴力算法:逐个比对,逐个移动复杂度mn
优化:快速移动,方法是记录相同的使K前缀和K后缀最长的K
在这里插入图片描述
关键问题是如何求next数组
考虑递推,假设已经知道了next[i]求next[i+1],只要看下一个是否相等

  • 相等,前缀后缀都后移即可
  • 不相等,要回退,要找到绿色部分中A的前缀和B的后缀重合最多的部分,A==B,就是求A的next

#include <iostream>
#include <string>
using namespace std;
const int MAXN = 1e5 + 5;
int nxt[MAXN];
void getNxt(string p)
{
	int len = p.length();
	nxt[0] = 0;
	for (int i = 1, j = 0; i < len; i++)
	{
		while (j && p[i] != p[j]) j = nxt[j - 1];
		if (p[i] == p[j]) j++;
		nxt[i] = j;
	}
}
int KMP(string s,string p)
{
	int lenS = s.length();
	int lenP = p.length();
	int cnt = 0;
	getNxt(p);
	for (int i = 0, j = 0; i < lenS; i++)
	{
		while (j && s[i] != p[j]) j = nxt[j - 1];
		if (s[i] == p[j]) j++;
		if (j == lenP)
		{
			cnt++;
			j = nxt[j - 1];
		}
	}
	return cnt;
}
int main()
{
	int T; cin >> T;
	string s, p;
	while (T--)
	{
		memset(nxt, 0, sizeof(nxt));
		cin >> p >> s;
		cout << KMP(s, p) << endl;
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序设计思维与实践 Week15 作业 的相关文章

  • iOS集成七牛云(上传图片,视频,音频等文件)

    用的CocoaPods导入SDK platform ios 39 9 0 39 target 39 项目名 39 do pod 39 AFNetworking 39 pod 39 Qiniu 39 end 导入头文件 import lt Q
  • windows10 RDP 桌面远程 linux桌面 centos7 ghome

    windows系统桌面远程协议是RDP协议 xff0c 而linux的是VNC协议 xff0c 所以windows要远程Linux需要先安装XRDP协议 注 xff1a linux centos 系统不能是最小化安装 xff0c 需要有GN
  • 手把手教你获取x信本地数据库(利用Sqlcipher查看)

    最近一直在研究Xposed等一些hook框架 xff0c 进行学习做一些demo xff0c 这次就正好拿x信练练手 xff0c 学习学习 xff0c 也可以学习x信手机本地数据库的表结构设计等 好 xff0c 废话不多说 xff0c 直接
  • netperf使用笔记

    一 netperf是什么 netperf是一个基于client server模式的网络测试工具 xff0c 可以测量TCP和UDP传输的吞吐量 时延 CPU占用率等性能参数 它可以测试以下几种模式的TCP核UDP网络性能 xff1a TCP
  • 程序的几种常用格式文件

    span class hljs keyword int span span class hljs keyword global span span class hljs keyword int span calculate span cla
  • 2020年北航计算机学院面向对象第一单元总结

    文章目录 一 基于度量来分析自己的程序结构第一次作业第二次作业第三次作业 二 分析自己程序的bug三 分析自己发现别人程序bug所采用的策略四 应用对象创建模式来重构五 对比和心得体会 一 基于度量来分析自己的程序结构 第一次作业 第一次作
  • keil调试模式下能运行 烧录到板子中不能运行

    一 程序中使用了printf函数 1 现象 在debug模式下可以运行 xff0c 脱离debug模式无法运行 2 原因 在程序中使用了printf函数 xff0c 但是却没有包含keil的微库 xff0c 或者对于printf函数没有进行
  • 洛谷P4180 次小生成树学习

    题目链接 BJWC2010 严格次小生成树 洛谷 严格次小生成树是指第二小的生成树 总的思路是先求最小生成树 xff08 设最小生成树的总花费sum xff09 xff0c 把每条边都标记 xff0c 再遍历没被标记的边 xff0c 此时这
  • Codeforces 758D 贪心

    Ability To Convert time limit per test 1 second memory limit per test 256 megabytes input standard input output standard
  • Docker入门

    官网地址 概述 场景1 xff1a 不同语言开发的应用程序部署到同一操作系统上 xff0c 往往操作系统需要根据相应的语言来配置 xff0c 如果配置发生冲突就无法完成部署 这时候我们需要对这2个应用进行隔离 xff0c 使它们运行所依赖的
  • Debian11系统安装

    下载 下载地址 VMware创建虚拟机 1 Host only模式 xff1a 所有虚拟机可以相互访问 xff0c 但和真实的物理网络环境是隔离开的 xff0c 此模式下的IP信息是由host only虚拟网络的DHCP服务器来分配的 xf
  • Debian11之Jdk安装

    参考这里
  • Debian11之 Containerd1.7.x 安装及配置

    官网 介绍 1 K8S发布的CRI xff08 Container Runtime Interface xff09 统一了容器运行时接口 xff0c 凡是支持CRI的容器运行时的皆可作为K8S的底层容器运行时 xff0c 而Docker 没
  • Debian11之基于kubeadm安装K8S(v1.26.0) 集群

    硬件要求 1 Master主机 xff1a 2核CPU 4G内存 20G硬盘 2 Node主机 xff1a 4 43 核CPU 8G 43 内存 40G 43 硬盘 2 集群中的所有机器的网络彼此均能相互连接 xff08 公网和内网都可以
  • Debian11之Rancher2.7.x安装

    前言 Rancher 是一个为开源容器打造的容器管理平台 Kubernetes 管理工具 xff0c 使得开发者可以随处运行 Kubernetes xff08 Run Kubernetes Everywhere xff09 xff0c 满足
  • AirSim学习(1)-介绍,安装,unity测试

    home AirSim是一款基于虚幻引擎的无人机 汽车等模拟器 我们现在也有一个实验性的Unity版本 它是开源的 xff0c 跨平台的 xff0c 支持使用流行的飞行控制器 如PX4和ArduPilot 进行软件在环模拟 xff0c 并支
  • 华为设备默认console密码

    admin 64 huawei com Admin 64 huawei com Admin 64 huawei huawei com huawei 64 123 huawei Change Me
  • 华为交换机批量加入 Vlan 方法

    华为交换机单独加入vlan太麻烦 xff0c 思科有批量加入vlan的方法 xff0c 华为也有 要求 1 6口划分到vlan2 6 12口划分到vlan3 13 18口划分到vlan4 19 24口划分到vlan5 25 26 加入tru
  • [golang]Go常见问题:# command-line-arguments: ***: undefined: ***

    今天遇见一个很蛋疼的问题 xff0c 不知道是不是我配置的问题 xff0c IDE直接run就报错 问题描述 在开发代码过程中 xff0c 经常会因为逻辑处理而对代码进行分类 xff0c 放进不同的文件里面 xff1b 像这样 xff0c
  • Qt之利用系统空闲

    Qt之利用系统空闲 如何利用系统空闲 xff0c 处理指定函数 xff1f To make your application perform idle processing by executing a special function w

随机推荐