力扣:字符串中的第一个唯一字符(C++实现)

news/2024/5/20 22:48:24/文章来源:https://blog.csdn.net/weixin_53811859/article/details/130022578

在这里插入图片描述

在这里插入图片描述

题目部分:

在这里插入图片描述

解题思路:

方案一:

首先认真审题的小伙伴们一定会发现就是题目给了提示只包含小写字母,也就是说我们的排查范围是小写的26个字母。为了怕有的友友们一时短路想不起来,我就其按照顺序列出来吧。

即:a、b、c、d、e、f、g、h、i、j、k、l、m、n、o、p、q、r、s、t、u、v、w、x、y、z

根据题意,我们的目标就是从给出的字符串中,找出出现的第一个不重复出现的小写26个字母中的一个,并将其对应在字符串数组中的下标位置返回去;若找完整个字符串后,均为重复出现的子母,即未发现只出现一次的子母,则返回-1。

附:ASCII表

在这里插入图片描述

结合我们的ASCII表就可以很轻松的做出此题来,根据该表的提示,我们可以发现初始字母a所映射对应的整数是97,那么我们就可以开始做文章了。

定义一个计算每个小写字母出现次数的数组(默认我都是按照26个字母的顺序),并初始化为0。

紧接着用一个循环来统计出每个字母所出现的次数,循环内如何操作呢?代码走的逻辑就是拿当前字符串中当前对应的字母映射的整数值减去字母a映射的整数值,就能得知该字母在我们统计出现次数数组中的位置,并表示它已经出现一次了,所以要在原有次数上加一。

在这里插入图片描述

为了怕大家不懂我统计次数循环内代码走的逻辑,我特意拿示例1来做示范讲解。

示例1给的字符串第一个字母是l,在ASCII表映射对应的整数是108,前面我们不是有讲到初始字母a在该表映射对应的整数是97吗?用108-97=11,也就是代表数组中的第11个位置(也就是l的位置)的字母出现了一次【需要清楚的是数组下标是从0开始,家人们别忘记了】,因此要在该元素位置次数+1。

在这里插入图片描述

很多xdm可能会疑惑为什么要减字母a呢?干嘛不减字母b呢?这就是可能you钻牛角尖了。我在前面就有说过我默认的字母数组出现次数的排序,是按照它们原本的顺序。对应关系就是我下图所示:

在这里插入图片描述

只有从减字母a开始才能对应的了上图的关系,若到这里还不能理解的话,我建议大神你回炉重造!

在这里插入图片描述

方案一演示代码讲解如下:

在这里插入图片描述

测试结果:

方案一:

在这里插入图片描述

备注:

楼主不才,不喜勿喷,若有错误或需要改进的地方,非常感谢你的指出,我会积极学习采纳。谢谢家人们一直以来的支持和鼓励,我会继续努力再接再励创作出更多优质的文章来回报家人们的。编程爱好的xdm,若有编程学习方面的问题可以私信我一同探讨(我尽力帮),毕竟“众人拾柴火焰高”,大家一起交流学习,共同进步!

在这里插入图片描述

2023年4月8日

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

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

相关文章

[架构之路-157]-《软考-系统分析师》- 9-信息系统规划-2-少量人力进行项目初步调研(系统分析师的首要任务)与可行性研究报告

目录 9 . 3 初步调查 1. 初步调查的目标 9.4可行性研究 9.4.1可行性评价准则 1 . 经济可行性(钱的可行性) 2 . 技术可行性(能力可行性) 3 . 法律可行性(社会) 4 . 用户使用可行性(用户&…

洛谷P2822:组合数问题 ←(帕斯卡法则+取模+前缀和)

【题目来源】https://www.luogu.com.cn/problem/P2822【题目描述】 组合数​表示的是从n个物品中选出m个物品的方案数。举个例子:从(1,2,3)三个物品中选择两个物品可以有(1,2),(1,3),(2,3) 这三种选择方法。根据组合数的定义,我们…

属性配置的宏(修改宏IntDir)

项目属性页码 拷贝下 常见宏列表 下表描述了可用宏的常用子集;还有很多没有在这里列出。 转到“宏”对话框,查看项目中的所有属性及其当前值。 有关如何创建 MSBuild 属性定义以及如何在 .props、.targets 和 .vcxproj 文件中将其用作宏的详细信息&am…

面向对象编程(进阶)7:面向对象特征三:多态性

一千个读者眼中有一千个哈姆雷特。 目录 7.1 多态的形式和体现 7.1.1 对象的多态性 举例: 7.1.2 多态的理解 7.1.3 举例 1、方法内局部变量的赋值体现多态 2、方法的形参声明体现多态 3、方法返回值类型体现多态 7.2 为什么需要多态性(polymorphism)&#x…

登录认证功能的实现

1.登录校验分析 什么是登录校验? 所谓登录校验,指的是我们在服务器端接收到浏览器发送过来的请求之后,首先我们要对请求进行校验。先要校验一下用户登录了没有,如果用户已经登录了,就直接执行对应的业务操作就可以了…

C语言头文件路径相关问题总结说明

聊聊系统路径位置&#xff0c;绝对路径与相对路径&#xff0c;正斜杠 / 与 反斜杠 \ 使用说明 ...... by 矜辰所致目录前言一、C语言中的头文件引用二、KEIL 中的头文件路径2.1 IncudePaths 指定的路径绝对路径和相对路径正斜杠 / 与 反斜杠 \ 与双斜杠2.2 include < >…

VN5620以太网测试——环境搭建篇

文章目录 前言一、新建以太网工程二、Port Configuration三、Link up四 Trace界面五、添加Ethernet Packet Builder六、添加ARP Packet七、添加Ethernet IG总结前言 CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。 …

页面预加载优化实践

概述在客户端开发中&#xff0c;列表类型页面大多都依赖网络请求&#xff0c;需要等网络数据请求下来后再刷新页面。但遇到网络请求慢的场景&#xff0c;就会导致页面加载很慢甚至加载失败。我负责会员的商品列表页面&#xff0c;在业务场景中&#xff0c;页面元素比较复杂&…

初学对象存储OSS---学习笔记

文章目录前言一、OSS是什么&#xff1f;下面以一个小故事介绍OSS的作用&#xff1a;二、怎么使用OSS1.进入 -----> [阿里云官网](https://www.aliyun.com/)2.点击进入OSS控制台3.获取accessKeyId 和 accessKeySecret4.拿到了accessKeyId 和 accessKeySecret &#xff0c;就可…

[Netty] Netty与Os的零拷贝 (五)

1.Netty的零拷贝原理 Netty接收和发送ByteBuffer采用DirectBuffer&#xff0c;使用堆外直接内存进行Socket读写&#xff0c;不需要进行字节缓冲区的二次拷贝。如果使用传统的JVM的堆内存&#xff08;Heap Buffer&#xff09;进行socker读写&#xff0c;那么JVM将会将堆内存拷贝…

javaScript---理解异步

目录 同步与异步 进程和线程 JS单线程 定时器 同步与异步 同步&#xff1a;调用之后得到结果再干别的任务。 异步&#xff1a;调用之后先不管结果&#xff0c;继续干别的任务。 进程和线程 进程&#xff08;process&#xff09;程序运行的实例&#xff0c;同一个程序可以产生多…

RestClient操作文档

RestClient操作文档5.RestClient操作文档5.1.新增文档5.1.1.索引库实体类5.1.2.语法说明5.1.3.完整代码5.2.查询文档5.2.1.语法说明5.2.2.完整代码5.3.删除文档5.4.修改文档5.4.1.语法说明5.4.2.完整代码5.5.批量导入文档5.5.1.语法说明5.5.2.完整代码5.6.小结5.RestClient操作…

多测合一生产软件SISS教程大全

下载&#xff1a; 在这里插入代码片产品介绍&#xff1a; 不动产权籍调查测绘软件RESS是南方数码针对不动产权籍调查测绘工作研发的一款专业的数据处理软件&#xff0c;融合了业内主流测绘软件&#xff08;南方数码地形地籍成图软件CASS和新一代房测之友BMFse&#xff09;的核…

C++ 一些在工作中遇到的小问题的c++解决脚本程序,记录用的

文章目录前言1 从"txt"文件中读取数组2 线性插值生成数组后存入“.txt”文件前言 本博客用于记录在工作中遇到的一些C小脚本。 1 从"txt"文件中读取数组 txt内文本如下图所示&#xff0c;按行记录数据&#xff0c;每组数据包含第一列为Index即索引号&…

【学习提高】JVM垃圾收集器,垃圾回收算法,一个对象从创建到回收的过程。

1、JVM垃圾收集器 不同的垃圾回收器&#xff0c;适用于不同的场景。常用的垃圾回收器&#xff1a;   串行&#xff08;Serial&#xff09;回收器是单线程的一个回收器&#xff0c;简单、易实现、效率高。   并行&#xff08;ParNew&#xff09;回收器是Serial的多线程版&…

面向对象编程(基础)1:面向对象思想精髓的理解

目录 1. 面向对象编程概述(了解) 1.1 程序设计的思路 1. 面向过程的程序设计思想&#xff08;Process-Oriented Programming&#xff09;&#xff0c;简称POP 2. 面向对象的程序设计思想&#xff08; Object Oriented Programming&#xff09;&#xff0c;简称OOP 1.2 由实…

在Android Studio通过adb命令强制安装debug版本apk到手机,且允许version code降级

在Android Studio通过adb命令强制安装debug版本apk到手机&#xff0c;且允许version code降级 切换到Terminal&#xff1a; adb install -t -d -r -g .\app\build\intermediates\apk\debug\app-arm64-v8a-debug.apk .\app\build\intermediates\apk\debug\是android studio的…

使用vue-element-admin定制化构建测试平台

基础环境搭建 vue-element-admin环境搭建 直接下载 https://gitee.com/constfiv/vue-element-admin-fix-install-problem&#xff0c;相比于https://github.com/PanJianChen/vue-element-admin.git的版本&#xff0c;这个版本好很多&#xff0c;npm intsall不会有各种依赖的问…

安装Jupyter notebook,修改Jupyter notebook打开路径,虚拟环境,以及Jupyter notebook基本操作

一、经过以下步骤你可以实现在虚拟环境中安装jupyter notebook&#xff0c;以及启动jupyter notebook。 创建虚拟环境 conda create -n demo python3.9激活虚拟环境 conda activate demo虚拟环境中安装jupyter notebook conda install jupyter notebook启动jupyter noteboo…

LeetCode 1040. Moving Stones Until Consecutive II【排序,滑动窗口,双指针】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…