串的相关题目

于是他错误的点名开始了

我发现有关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.hqwc.cn/news/484950.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法)

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法) 写上篇文章时测试过程比较乱&#xff0c;写的时候有些地方有点失误&#xff0c;所以重新写了这篇 本文内容均在RGB-D环境下进行程序测试 本文涉及到的动态特征点剔除速度均是以https://cvg.cit.tum.de/data/datasets/rgbd-dat…

Kubernetes 卷存储 NFS | nfs搭建配置 原理介绍 nfs作为存储卷使用

目录 1、NFS介绍2、NFS服务部署2.1安装nfs服务 (服务端配置)2.2启动NFS服务2.3 服务检查2.4 客户端配置 3、nfs作为存储卷使用3.1 nfs作为volume3.2 nfs存储的缺点3.3 nfs作为PersistentVolum 4、nfs作为动态存储提供5、总结 1、NFS介绍 NFS&#xff08;Network File System&a…

模糊的照片怎么变清晰?这些方法让你快速完成

在我们日常生活中&#xff0c;拍照已经成为记录生活点滴的重要方式。然而&#xff0c;有时候由于各种原因&#xff0c;拍摄出来的照片会显得模糊不清&#xff0c;这让我们感到十分苦恼。尤其是当我们希望珍藏那些对我们有着特殊意义的照片时&#xff0c;却因为清晰度不足而无法…

智慧公厕是什么?智慧公厕是构建智慧城市的环境卫生基石

随着城市化进程的不断加速&#xff0c;城市人口密度和流动性也逐渐增大&#xff0c;对城市公共设施的需求与日俱增。而在这些公共设施中&#xff0c;公厕作为城市基础设施中不可或缺的一环&#xff0c;对城市的环境卫生和市民生活质量起着举足轻重的作用。如何提高公厕的管理效…

思考:如何写出让同事难以维护的代码?

本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例&#xff0c;相信通过这些案例你能迅速get技能&#xff1a;如何写出让同事难以维护的代码doge。 比起什么程序员删库跑路&#xff0c;我更喜欢「写出让…

基于springboot+vue的电影评论网站(前后端分离)

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

OPPO公布全新AI战略;苹果iPad新品细节曝光;周鸿祎称Sora工作原理像人做梦

OPPO 公布全新 AI 战略&#xff0c;AI 手机时代再提速 昨日&#xff0c;OPPO 举办 AI 战略发布会&#xff0c;分享新一代 AI 手机的四大能力特征&#xff1a; AI 手机首先要能够高效地利用计算资源&#xff0c;以满足 AI 时代下生成式 AI 的计算需要&#xff1b;AI 手机要能敏…

SwiftUI 集合视图(Grid)拖放交换 Cell 的极简实现

概览 自从 SwiftUI 横空出世那天起&#xff0c;小伙伴们都感受到了它惊人的简单与便捷。而在本课中&#xff0c;我们将会用一个小“栗子”更直观的让大家体验到它无与伦比简洁的描述性特质&#xff1a; 如上图所示&#xff0c;我们在 SwiftUI 中实现了 Grid 中拖放交换 Cell 的…

IIC通信驱动EEPROM,AT24C02硬件存储器编程(2)

接着上一篇博客文章讲解了IIC协议的原理及编程思路&#xff0c;本篇博客文章将以IIC为基础&#xff0c;从芯片手册入手&#xff0c;梳理讲解如何对AT24C02进行驱动编程&#xff0c;实现数据的读写操作。IIC通信驱动硬件编程 (1)-CSDN博客https://blog.csdn.net/weixin_49337111…

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…

FSQ: FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE

Paper name FINITE SCALAR QUANTIZATION: VQ-VAE MADE SIMPLE Paper Reading Note Paper URL: https://arxiv.org/abs/2309.15505 Code URL: (官方 jax 实现) https://github.com/google-research/google-research/tree/master/fsq(pytorch 实现) https://github.com/luci…

教你用Appium搭建Android自动化测试框架(详细教程)

如题&#xff0c;本文附有仓库地址以及代码&#xff0c;目录如下&#xff1a; 1.下载安装appium 2.配置并使用appium 3.配置工程 一、下载安装appium 下载appium-desktop的mac版本&#xff0c;我选择用1.17.1版本&#xff0c;最新的版本1.22.0&#xff0c;拆分一个桌面应用…