串的相关题目

于是他错误的点名开始了

我发现有关hash得题目有些是可以通过map数组来完成的:何为map数组,我们先思考一下最简单的桶的排序,桶排序是将我们需要数字最为下标输进数组中,而数组是存放的数字是这个数字出现的次数,但是由于如果数据过大且数字并不稠密,则会导致浪费很多空间。而map数组也是桶排序一样的思想,我们首先来看map数组是怎样定义的?

map<string ,int>a;

string是字符串的意思,这个是将字符串作为下标,后面的int就是map数组所存的数字,一般运用于这个字符串出现了几次。看看这个思路是不是和桶排序差不多。这个map在#include<map>这个头文件中

好既然我们知道了如何使用map,那我们就压迫思考如何使用map数组来解决这一道题目
思路如下:我们将每一个字符串作为map数组的下标,如果是第一次出现那么map的int类型就要为1。接下来进行第2次输入字符串,如果发现这个字符串作为下标的int值为1,那么就输出OK ,而且将这个下标记为2,如果下一次这个字符串作为下标再一次出现,且int值为2,就说明已经重复了,那么我们就输出REPEAT.如果int是其他值就说明根本没有出现过,那么就直接输出WRONG

代码如下 

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
map<string ,int>a;
string s1,s2;
int n,m;
int main()
{
	cin>>n;
	while(n--)
	{
		cin>>s1;
		a[s1]=1;
	}
	cin>>m;
	while(m--)
	{
		cin>>s1;
		if(a[s1]==1)
		{
			printf("OK\n");
			a[s1]=2;
		}
		else if(a[s1]==2)
		{
			printf("REPEAT\n");
		}
		else
		{
			printf("WRONG\n");
		}
	}
	return 0;
}

A-B 数对

首先我们需要转换思路,题目让我求A-B=C, 我们可不可以转换为A-C=B?完全可以
为什么我们需要做这样的转化?  应为在之前A-B=C这样我们需要从一堆数据中寻找到两个符合要求的数字,而且答案是只有一个C。但是如果我们换了一个思路,B从哪里来?是不是从数组中来?答案就是在数组里面,那你就有可能会问了,那从数组里面找答案不是更加难吗?no no no。我们是不是可以用map数组,如果这个出现了一次就记录加加,我们再将数组全部都减去C这个是不是就是B,那么我们将B作为map数组下标输进去,有几次记录就有几个答案。是不是很妙?我第一次看到这样的写法我都震惊了。

代码如下

#include<iostream>
#include<cstring>
#include<map>
#include<string.h>
using namespace std;
typedef long long ll;
const int N=2e5+100;
map<ll,ll> a;
ll ans[N];
ll n,c;
int main()
{
	cin>>n>>c;
	for(int i=1;i<=n;i++)
	{
		cin>>ans[i];
		a[ans[i]]++;//这个就是A-C=B中B的个数,其实就是在答案中找
		ans[i]-=c;//这个就是B,如果遍历一遍整个数组,发现在map数组中有,那么map数组中有几个,那么就出现了几次
	}
	ll anss=0;
	for(int i=1;i<=n;i++)
	{
		anss+=a[ans[i]];
	}
	cout<<anss<<endl;
	return 0;
}

【模板】字符串哈希

仔细看这题 说是不是就是找有几个不同的字符串?那我们换个思路是不是就是看有几个字符串是相同的,拿着不就是和第一题差不多嘛,用一个map数组,第一个类型为string 作为下标,第二个类型为int 作为map数组具体的值,如果这个字符串出现了int 类型就进行几次加加。最后一次遍历,将int 的值为0进行累加

代码如下

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
map<string ,int>a;
string s1,s2;
int n,m;
int main()
{
	cin>>n;
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		cin>>s1;
		if(a[s1]==0)
		{
			a[s1]=1;
			ans++;
		}
	}
	cout<<ans<<endl;
	return 0;
}

 [USACO09OCT] Barn Echoes G

首先我看到题目并不是先想到hash的方法,我也不知道这一题用hash怎么做,反而我先想到的是用kmp算法来写 ,他题目自己说了要使用前后缀相同来写,这很自然的就想到了。这个题目有个坑点就是它没说那个是主串,那个是模式串,这两个字符串都分别作为主串和模式串来一遍kmp。

还有一个坑点就是两个模式串第一个可以是前缀,下一个是后缀。然后还可以是第二个是前缀,第一个是后缀,所以也是要使用两遍kmp算法来保证都能充当一次前缀后缀,模式串,主串。

然后用一个变量anss来记录最大的长度就可以过来了(嘿嘿 我的独创思路,还有点小自豪

#include<iostream>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<cstdio>
using namespace std;
char s1[100];
char s2[100];
int kmp[100];
int main()
{
	scanf("%s",s1+1);
	scanf("%s",s2+1);
	int len1=strlen(s1+1);
	int len2=strlen(s2+1);
	
	
		int j=0;
		for(int i=2;i<=len2;i++)
		{
			while(j>0&&s2[i]!=s2[j+1])j=kmp[j];
			if(s2[i]==s2[j+1])j++;
			kmp[i]=j;
		}
		int ans=-1;
		j=0;
		for(int i=1;i<=len1;i++)
		{
			while(j>0&&s1[i]!=s2[j+1])j=kmp[j];
			if(s1[i]==s2[j+1])j++;
			ans=max(ans,j);	
		}	
	

	
		j=0;
		for(int i=2;i<=len1;i++)
		{
			while(j>0&&s2[i]!=s2[j+1])j=kmp[j];
			if(s1[i]==s1[j+1])j++;
			kmp[i]=j;
		}
		j=0;
		for(int i=1;i<=len2;i++)
		{
			while(j>0&&s2[i]!=s1[j+1])j=kmp[j];
			if(s2[i]==s1[j+1])j++;
			ans=max(ans,j);	
		}	
		cout<<ans<<endl;
	
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/403116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PLC_博图系列☞基本指令“异或“运算

PLC_博图系列☞基本指令“异或“运算 文章目录 PLC_博图系列☞基本指令“异或“运算背景介绍X&#xff1a;“异或”运算说明参数示例真值表 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 异或 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的…

06 内存管理

目录 c/c内存分布c语言中动态内存管理方式c中动态内存管理方式operator new与operator delete函数new和delete的实现原理定位new表达式(placement-new)常见题 1. c/c内存分布 看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticV…

基于springboot+vue的教学资源库系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

linux操作系统day2(io文件处理)

二进制文件读写&#xff1a; fread()/fwrite() 读&#xff1a; size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); 功能&#xff1a; 从指定的stream流对象中获取nmemeb个大小为size字节的数据块到ptr 所在的本地内存中。 参数&#xff1a; pt…

【Python Scrapy】分布式爬虫利器

在当今信息爆炸的时代&#xff0c;获取大规模数据对于许多应用至关重要。而分布式爬虫作为一种强大的工具&#xff0c;在处理大量数据采集和高效爬取方面展现了卓越的能力。 本文将深入探讨分布式爬虫的实际应用场景&#xff0c;通过代码示例演示其在提升爬取效率、保障系统稳定…

3个wordpress中文企业主题模板

农业畜牧养殖wordpress主题 简洁大气的农业畜牧养殖wordpress主题&#xff0c;农业农村现代化&#xff0c;离不开新农人、新技术。 https://www.jianzhanpress.com/?p3051 老年公寓wordpress主题 浅绿色简洁实用的老年公寓wordpress主题&#xff0c;适合做养老业务的老年公…

day09-MongoDB

文章目录 day09-MongoDB一、回顾1.1. 行为实战核心要点说明 二、评论系统2.1 MongoDB2.1.1 MongoDB简介①简介②体系结构与术语 2.1.2 安装与连接2.1.3 Springboot整合MongoDB①引入依赖②添加服务端配置③准备实体类④测试-新增⑤测试-查询⑥测试-更新测试-删除 2.2 app端评论…

配置redis-cell 控流插件

1.下载绑定资源也可以到git上下载 https://gitee.com/dianjinshi/springboot-nginx.git 2.创建文件夹 mkdir redis-cell 3.上传到linux上并进入文件夹解压 4.拷贝 docker cp libredis_cell.so redis:/usr/local/etc/redis 5.重启redis docker restart redis 6.进入redis…

5 步轻松上手,教你从 0 到 1 落地 Jmeter 接口自动化脚本!

Jmeter是进行接口测试的一款非常主流的工具&#xff0c;但绝大部分测试工程师&#xff0c;对于Jmeter接口测试脚本整理都是一知半解的。今天这篇文章&#xff0c;就以一个金融项目中接口为例&#xff0c;通过简单5步&#xff0c;教大家如何0代码编写Jmeter接口自动化脚本&#…

B端系统:工作台页面,如何从平庸走向出众

Hi&#xff0c;大家好&#xff0c;我是贝格前端工场&#xff0c;从事8年前端开发的老司机。大家看过很多平庸的工作台页面&#xff0c;但是仔细分析过平庸的表现吗&#xff0c;仔细思考过如何实现出众的效果吗&#xff1f;这篇文章为你解读。 一、工作台页面是什么&#xff0c;…

【进程概念】

目录 什么是在计算机运行的程序这么多运行的程序计算机是如何管理的先描述再组织 什么是在计算机运行的程序 对于一个在磁盘可执行的二进制文件&#xff0c;也可叫做可执行程序。对于一个可执行的程序&#xff0c;程序有自己的代码和数据。一旦运行起来&#xff0c;就会在计算…

第5讲:数组

第5讲:数组 1. 数组的概念2. 一维数组的创建和初始化2.1 数组创建2.2 数组的初始化2.3 数组的类型 3. ⼀维数组的使用3.1 数组下标3.2 数组元素的打印3.3 数组的输入 4. ⼀维数组在内存中的存储5. sizeof计算数组元素个数6. 二维数组的创建6.1 二维数组的概念6.2 二维数组的创建…

从大厂裸辞后成为自由职业者,一年后我怎么样了?

深耕技术领域7年&#xff0c;前前后后也做过不少副业&#xff0c;最近我一直在思考什么副业才是对自己有价值的&#xff0c;可持续的&#xff0c;甚至是可增长的。 22年我所在团队的一个项目解散了&#xff0c;领导问我想拿钱走还是转岗&#xff0c;想想自己也在这个公司干了5…

【国产MCU】-CH32V307-通用定时器(GPTM)-单脉冲模式

通用定时器(GPTM)-单脉冲模式 文章目录 通用定时器(GPTM)-单脉冲模式1、单脉冲模式介绍2、驱动API介绍3、单脉冲使用实例本文将详细介绍如何使用CH32V307通用定时器的单脉冲模式。 1、单脉冲模式介绍 单脉冲模式可以响应一个特定的事件,在一个延迟之后产生一个脉冲,延迟…

超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)

超市售货管理小程序目录 目录 基于微信小程序的超市售货管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;商品管理 &#xff08;2&#xff09;出入库管理 &#xff08;3&#xff09;公告管理 …

Python爬虫实战入门:爬取360模拟翻译(仅实验)

文章目录 需求所需第三方库requests 实战教程打开网站抓包添加请求头等信息发送请求&#xff0c;解析数据修改翻译内容以及实现中英互译 完整代码 需求 目标网站&#xff1a;https://fanyi.so.com/# 要求&#xff1a;爬取360翻译数据包&#xff0c;实现翻译功能 所需第三方库 …

【OpenFeign常用配置】

OpenFeign常用配置 快速入门&#xff1a;1、引入依赖2、启用OpenFeign 实践1、引入依赖2、开启连接池功能3、模块划分4、日志5、重试 快速入门&#xff1a; OpenFeign是一个声明式的http客户端&#xff0c;是spring cloud在eureka公司开源的feign基础上改造而来。其作用及时基于…

【C++精简版回顾】5.字符串

1.字符串的四种初始化方式 string str "ilove"; string str1("ilove"); string str2(str1); string str3 str1; 2.针对字符串的一些函数 &#xff08;1&#xff09;字符串长度 cout<<str.length()<<endl;&#xff08;2&#xff09;查找字…

Android platform tool中d8.bat不生效

d8.bat因找不到java_exe文件&#xff0c;触发EOF d8.bat中之前代码为&#xff1a; set java_exe if exist "%~dp0..\tools\lib\find_java.bat" call "%~dp0..\tools\lib\find_java.bat" if exist "%~dp0..\..\tools\lib\find_java.bat" …

PowerDesigner 安装

PowerDesigner 安装汉化破解使用过程 - 沦陷 - 博客园 (cnblogs.com)https://www.cnblogs.com/huangting/p/12654057.html