leetcode387. 字符串中的第一个唯一字符,哈希表

leetcode387. 字符串中的第一个唯一字符

给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。

示例 1:
输入: s = “leetcode”
输出: 0

示例 2:
输入: s = “loveleetcode”
输出: 2

示例 3:
输入: s = “aabb”
输出: -1

提示:
1 <= s.length <= 105
s 只包含小写字母

在这里插入图片描述

目录

  • leetcode387. 字符串中的第一个唯一字符
  • 题目分析
    • 题目描述
    • 算法分析
  • 算法步骤
  • 算法流程
  • 算法代码
  • 算法分析
    • 复杂度分析
    • 易错点
    • 注意事项
  • 相似题目
  • 相似题目

题目分析

题目描述

给定一个字符串 s,返回它的第一个不重复字符的索引。如果不存在,则返回 -1。

算法分析

这个问题可以通过使用哈希表来解决。我们首先遍历字符串,使用哈希表记录每个字符出现的次数。然后,我们再次遍历字符串,查找第一个出现次数为 1 的字符,并返回其索引。

算法步骤

  1. 初始化一个空哈希表 q
  2. 遍历字符串 s,对于每个字符,将其添加到 q 并增加其计数。
  3. 再次遍历字符串 s,查找第一个在 q 中计数为 1 的字符,并返回其索引。
  4. 如果所有字符都至少出现两次,返回 -1。

算法流程

开始
初始化无序映射 q
遍历字符串 s
添加字符计数到 q
再次遍历字符串 s
检查 q 中字符计数
返回索引
返回 -1
结束

算法代码

class Solution {
public:int firstUniqChar(string s) {unordered_map<char,int> q;for(int i=0;i<s.size();i++)q[s[i]]++;for(int i=0;i<s.size();i++){if(q[s[i]]==1) return i;}return -1;
}
};

算法分析

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。我们只需要遍历字符串两次。
  • 空间复杂度:O(min(m, n)),其中 m 是字符集的大小。哈希表的大小取决于字符集的大小和字符串中不同字符的数量。

易错点

  • 在初始化哈希表时,确保正确地记录每个字符的出现次数。
  • 在查找第一个不重复字符时,确保正确地返回其索引。

注意事项

  • 确保字符串只包含字符集内的字符。
  • 确保哈希表的键是字符串中的字符,值是对应的出现次数。

相似题目

相似题目

题目链接
找出字符串中唯一字符的索引https://leetcode.com/problems/find-first-unique-character-in-a-string/

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

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

相关文章

Xilinx FPGA:vivado关于以太网的零碎知识点

一、OSI七层模型 为了实现网络通信的标准化&#xff0c;普及网络应用&#xff0c;国际标准化组织&#xff08;ISO&#xff09;将整个以太网通信结构制定了OSI模型&#xff0c;即开放式系统互联。 OSI定义了网络互连的七层框架&#xff08;物理层、数据链路层、网络层、传输层、…

【leetcode】回文链表-25-3

方法&#xff1a;快慢指针递归遍历 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) …

宝塔面板部署webman项目+nginx反向代理

新建站点 新建一个站点&#xff0c;php版本选择纯净态即可&#xff0c;反正都是用不上的&#xff0c;域名填写你申请得到的域名 拉取代码 新建一个目录&#xff0c;然后将代码部署到本地 启动项目 推荐使用宝塔面板的进程守护管理器启动项目&#xff0c;其实就是用superviso…

快速体验fastllm安装部署并支持AMD ROCm推理加速

序言 fastllm是纯c实现&#xff0c;无第三方依赖的高性能大模型推理库。 本文以国产海光DCU为例&#xff0c;在AMD ROCm平台下编译部署fastllm以实现LLMs模型推理加速。 测试平台&#xff1a;曙光超算互联网平台SCNet GPU/DCU&#xff1a;异构加速卡AI 显存64GB PCIE&#…

[机器学习]全景指南:从基础概念到实战流程的全面解析

文章目录 1.引言1.1机器学习的重要性1.2机器学习的应用范围1.3本文的内容结构 2. 机器学习的基本概念与分类2.1 机器学习的定义2.2 机器学习的分类 4. 强化学习&#xff08;Reinforcement Learning&#xff09; 3. 机器学习的工作流程3.1 数据收集与准备1. 数据源与类型2. 数据…

Android进阶之路 - res、raw、assets 资源解析、区别对比

那天遇到一个资源目录层级的问题&#xff0c;索性重新整理记录一下&#xff0c;希望能帮到如吾往昔之少年的你们&#xff0c;哈哈哈哈哈哈… 一脸茫然&#xff0c;越写越多&#xff0c;时间成本属实有点大&#xff0c;就当一起来基础扫盲吧 resdrawablemipmapvaluescolor asset…

Redis未授权访问漏洞利用合集

一、基本信息 靶机&#xff1a;IP:192.168.100.40 攻击机&#xff1a;IP:192.168.100.60 二、漏洞 & 过程 Redis 未授权访问漏洞利用无口令远程登录靶机 靶机 cd redis-4.0.8/src./redis-server ../redis.conf 攻击机 ./redis-cli -h 192.168.100.40 Redis 未授权访问…

nginx安全控制

nginx的安全控制 参考文档&#xff1a;https://docs.nginx.com/nginx/admin-guide/security-controls/controlling-access-proxied-http/ 1. nginx作为web服务器 # nginx作为web服务器&#xff0c;配置虚拟主机 server {listen 80; server_name www.sxl1.com; # 域名…

synchronized轻量级锁原理和实战(四)

引入轻量级锁的目的 多线程竞争不激烈的情况下,通过CAS机制竞争减少重量级锁产生的性能消耗.重量级锁使用了操作系统底层的互斥锁,会导致线程在用户态和核心态之间切换.带来性能上的损耗. 轻量级锁的核心原理 轻量级锁存在的目的本身就是为了减少线程从内核态和用户态的切换…

笔试必备—Java输入输出流

Java 流 流可以理解为一个数据&#xff0c;输入流表示从一个源读取数据&#xff0c;输出流表示向一个目标写数据 Java 为 I/O 提供了强大的而灵活的支持&#xff0c;使其更广泛地应用到文件传输和网络编程中 Scanner类 提供了一系列的方法&#xff0c;更加直观、易用性高&…

【数学建模】趣味数模问题——四人追逐问题

问题描述&#xff1a; 如图所示&#xff0c;在正方形ABCD的四个顶点各有一个人。在初始时刻 t0 时&#xff0c;四人同时出发&#xff0c;以匀速 v 沿顺时针方向朝下一个人移动。如果他们始终对准下一个人为目标行进&#xff0c;最终结果会如何&#xff1f;需要作出各自的运动轨…

微信小程序 ==== 半屏打开小程序

目录 打开半屏小程序 调用流程 打开半屏小程序 半屏小程序环境判断 返回原小程序 使用限制 wx.openEmbeddedMiniProgram 功能描述 参数 wx.navigateBackMiniProgram 功能描述 示例代码 Object wx.getEnterOptionsSync() 功能描述 返回值 返回有效 referrerInfo…

计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Spring Boot集成Devtools实现热更新?

1.什么Devtools&#xff1f; DevTools是开发者工具集&#xff0c;主要用于简化开发过程中的热部署问题。 热部署是指在开发过程中&#xff0c;当代码发生变化时&#xff0c;无需手动重启应用&#xff0c;系统能够自动检测并重新加载修改后的代码&#xff0c;大大提高了开发效率…

UE基础 —— 关卡

目录 Working with Levels Managing Multiple Levels World Settings 更改默认关卡 关卡&#xff08;Level&#xff09;是游戏的"世界"的全部或部分&#xff1b;关卡包含玩家可以看到并与之交互的所有内容&#xff0c;如环境、可用对象、其他角色&#xff0c;等等…

理性看待、正确理解 AI 中的 Scaling “laws”

编者按&#xff1a;LLMs 规模和性能的不断提升&#xff0c;让人们不禁产生疑问&#xff1a;这种趋势是否能一直持续下去&#xff1f;我们是否能通过不断扩大模型规模最终实现通用人工智能&#xff08;AGI&#xff09;&#xff1f;回答这些问题对于理解 AI 的未来发展轨迹至关重…

郊游、旅游管理系统-计算机毕设Java|springboot实战项目

&#x1f34a;作者&#xff1a;计算机毕设匠心工作室 &#x1f34a;简介&#xff1a;毕业后就一直专业从事计算机软件程序开发&#xff0c;至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长&#xff1a;按照需求定制化开发项目…

【算法/学习】双指针

✨ 少年要迎着朝阳&#xff0c;活得肆无忌惮 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;算法学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &a…

python语言day6 os random datetime .ini文件

os&#xff1a; 获取运行当前py文件的绝对路径&#xff1a; abspath中添加路径&#xff0c;会直接和绝对路径拼接。 folder_path os.path.abspath("") print(folder_path) 路径拼接&#xff1a; mac系统路径&#xff1a;file/TranslucentTB win系统路径&#xff1a;…

python爬虫滑块验证及各种加密函数(基于ddddocr进行的一层封装)

git链接: https://github.com/JOUUUSKA/spider_toolsbox 这里写目录标题 一.识别验证码1、识别英文&#xff0b;数字验证码2、识别滑块验证码3、识别点选验证码 二、下载系列1、下载视频2、下载图片3、下载文本 三、常用加密类型1、AES系列2、DES系列3、RSA系列4、SHA系列5、B…