LeetCode 387 字符串中的第一个唯一字符 简单

2023-10-29 12:30

本文主要是介绍LeetCode 387 字符串中的第一个唯一字符 简单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目 - 点击直达

  • 1. 387 字符串中的第一个唯一字符
    • 1. 题目详情
      • 1. 原题链接
      • 2. 题目要求
      • 3. 基础框架
    • 2. 解题思路
      • 1. 思路分析
      • 2. 时间复杂度
      • 3. 代码实现

1. 387 字符串中的第一个唯一字符

1. 题目详情

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

1. 原题链接

LeetCode 387 字符串中的第一个唯一字符 简单

2. 题目要求

示例 1:

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

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

输入: s = “aabb”
输出: -1

提示:

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

3. 基础框架

● Cpp代码框架

class Solution {
public:int firstUniqChar(string s) {}
};

2. 解题思路

1. 思路分析

( 1 ) (1) (1) 哈希思想,使26个小写字母与一个大小为26的整型数组中的[0, 25]下标依次对应;
( 2 ) (2) (2) 对应规则是 小写字母字符 - 'a',结果就是该字母在整型数组对应的下标;
( 3 ) (3) (3) 遍历一遍字符串,字母出现就使整型数组对应下标位置的内容自增1,最后整型数组中[0, 25]存放的值就分别是['a', 'z']出现的次数;
( 4 ) (4) (4) 按照字符串中字符出现的顺序依次查找整型数组对应位置的值,找到就返回字符串字符对应位置;都找不到返回-1;

2. 时间复杂度

O ( N ) O(N) O(N)
第一次遍历字符串统计字符出现次数,共统计 n n n次;第二次通过字符串字符出现顺序在整型数组查找,共查找 n n n次;故时间复杂度是 O ( n ) O(n) O(n)

3. 代码实现

class Solution {
public:int firstUniqChar(string s) {/* 字符串只包含26个小写字母,把每个字母映射到一个大小为26的整形数组中,保证数组中的下标与唯一一个字母对应,规则是 字母的ASCII码值-'a'字符的ASCII码值,这样['a','z']对应数组[0,25]下标;*/// 统计规则是 字符每出现一次整形数组对应下标位置的值自增1int arr[26] = {0};for(auto & e: s){arr[e - 'a']++;}/* 整形数组保存了字符串中每个小写字母出现的次数,但是不能直接遍历整型数组找到出现一次字符的位置,因为整形数组与小写字母是按顺序映射的,应该按照字符串中字符出现的顺序在整形数组中查找*/for(int i = 0; i < s.size(); ++i){if(arr[s[i] - 'a'] == 1){return i;}}return -1;}
};

这篇关于LeetCode 387 字符串中的第一个唯一字符 简单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/300647

相关文章

Python 字符串裁切与提取全面且实用的解决方案

《Python字符串裁切与提取全面且实用的解决方案》本文梳理了Python字符串处理方法,涵盖基础切片、split/partition分割、正则匹配及结构化数据解析(如BeautifulSoup、j... 目录python 字符串裁切与提取的完整指南 基础切片方法1. 使用切片操作符[start:end]2

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)

《MyBatis的xml中字符串类型判空与非字符串类型判空处理方式(最新整理)》本文给大家介绍MyBatis的xml中字符串类型判空与非字符串类型判空处理方式,本文给大家介绍的非常详细,对大家的学习或... 目录完整 Hutool 写法版本对比优化为什么status变成Long?为什么 price 没事?怎

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、