串的相关题目

news2024/9/24 11:22:36

于是他错误的点名开始了

我发现有关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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python Scrapy】分布式爬虫利器

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

Day32 进程Process

文章目录 1.什么是进程1.1 概念1.2 特点1.3 进程段1.4 进程分类1.5 进程状态1.6 进程状态切换图1.7 调度进程 2.进程函数接口2.1 创建进程 fork()2.2 回收资源函数2.3 结束进程2.4 获取进程号 3.exec函数族&#xff08;了解&#xff09;4.守护进程 Daemon4.1 守护进程的特点4.2…

【xss跨站漏洞】xss漏洞利用工具beef的安装

安装环境 阿里云服务器&#xff0c;centos8.2系统&#xff0c;docker docker安装 前提用root用户 安装docker yum install docker 重启docker systemctl restart docker beef安装 安装beef docker pull janes/beef 绑定到3000端口 docker run --rm -p 3000:3000 janes/beef …

贷齐乐系统最新版SQL注入(无需登录绕过WAF可union select跨表查询)

一、环境 已上传资源&#xff08;daiqile&#xff09; 二、代码解释 1.1Request 不管get请求还是post请求都可以接收到 1.2过滤的还挺多 1.3第二个WAF把数据分为两个了一个Key一个value&#xff0c;全是explode的功劳 1.4submit是if进入的前提 很明显走进来了 1.5那我们在这…

2024年上海高考数学备考:历年选择题真题练一练(2014~2023)

今天距离2024年高考还有三个多月的时间&#xff0c;今天我们来看一下2014~2023年的上海高考数学的选择题&#xff0c;从过去十年的真题中随机抽取5道题&#xff0c;并且提供解析。 后附六分成长独家制作的在线练习集&#xff0c;科学、高效地反复刷这些真题&#xff0c;吃透真…

回显服务器的制作方法

文章目录 客户端和服务器TCP和UDP的特点UDP socket api的使用DatagramSocketDatagramPacketInetSocketAddress API 做一个简单的回显服务器UDP版本的回显服务器TCP版本的回显服务器 客户端和服务器 在网络中&#xff0c;主动发起通信的一方是客户端&#xff0c;被动接受的这一方…

【Nacos】构建云原生应用的动态服务发现、配置管理和服务管理平台【企业级生产环境集群搭建应用】

基础描述 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和…

API接口测试工具的使用指南

API接口测试是确保软件系统正常运作的关键步骤。API接口测试工具可以帮助开发人员和测试人员验证API的功能、性能和安全性。本文将介绍API接口测试工具的基本使用方法&#xff0c;以便有效地进行接口测试。 1. 选择合适的API测试工具 在开始API接口测试之前&#xff0c;首先需要…

MySQL-----多表操作

介绍 实际开发中&#xff0c;一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系&#xff0c;接下来我们将在单表的基础上&#xff0c;一起学习多表方面的知识。 一 多…

PostgreSQL限制密码的有效期(每次增加180天)

一、创建用户时&#xff0c;指定密码在180天后过期 创建用户时&#xff0c;可以使用如下语句&#xff0c;自动在当前时间的基础上增加180天&#xff0c;作为这个用户密码的有效时间。等到密码到期后或者临近的时候&#xff0c;可以使用SQL修改用户密码&#xff0c;并且重新定义…

echats 时间直方图示例

需求背景 某订单有N个定时任务&#xff0c;每个任务的执行时间已经确定&#xff0c;希望直观的查看该订单的任务执行趋势 查询SQL&#xff1a; select UNIX_TIMESTAMP(DATE_FORMAT(exec_time,%Y-%m-%d %H:%i)) execTime, count(*) from order_detail_task where order_no 2…

【命令行工具kubectl】

如何在k8s的任意节点使用用kubectl # 正常在node节点上是无法执行kubectl命令 [rootk8s-node-01 ~]# kubectl get pods The connection to the server localhost:8080 was refused - did you specify the right host or port?1、将master节点中/etc/kubernetes/,admin.conf拷…

Led灯驱动添加原子操作后驱动程序测试

一. 简介 上一篇文章实现了&#xff08;Linux驱动代码中&#xff09; 对 led灯的互斥处理&#xff0c;即使用Linux内核提供的处理并发与竞争的处理方法&#xff1a;原子操作。文章地址如下&#xff1a; Linux内核中并发与竞争的处理方法&#xff1a;原子操作举例-CSDN博客 …

React 模态框的设计(一)拖动组件的设计

春节终结束了&#xff0c;忙得我头疼。终于有时间弄自己的东西了。今天来写一个关于拖动的实例讲解。先看效果&#xff1a; 这是一个简单的组件设计&#xff0c;如果用原生的js设计就很简单&#xff0c;但在React中有些事件必须要多考虑一些。这是一个系列的文章&#xff0c;…

本机windows搭建达摩院与高德联合出品的地理地址自然语言处理模型GMeo实战

文章目录 本机windows搭建达摩院与高德联合出品的地理地址自然语言处理模型GMeo实战简介多模态地理文本预训练模型MGeoGeoGLUE 环境安装ModelScope相关安装conda虚拟环境深度学习基础库安装modelscope模型 测试代码代码输入xlsx文件运行这段测试代码输出xlsx耗时 如果有自定义样…

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

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

Python如何运用turtle绘制阴阳太极图

本文详细分析如何使用Python turtle绘制阴阳太极图&#xff0c;先来分解这个图形&#xff0c;图片中有四种颜色&#xff0c;每条曲线上的箭头表示乌龟移动的方向&#xff0c;首先从中心画一个半圆&#xff08;红线&#xff09;&#xff0c;以红线所示圆的直径作半径画一个校园&…

Leo赠书活动-18期 《高效使用Redis》

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型&#xff0c;朴素贝叶斯是生成模型&#xff0c;所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯&#xff0c;逻辑回归是最大似然&#xff0c;两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…

#1.4w字长文#仿抖音项目架构设计与实现

一、项目介绍 本文介绍了一个Web端短视频应用&#xff0c;致力于为用户提供交互友好、功能完备的短视频浏览体验和直播体验。 集成了Gorse推荐算法&#xff0c;旨在为用户提供更个性化的推荐视频流和更权威的热门视频流。接入大模型&#xff0c;通过对视频内容进行语言分析&a…