当前位置:网站首页>力扣每日一题-第52天-387. 字符串中的第一个唯一字符
力扣每日一题-第52天-387. 字符串中的第一个唯一字符
2022-08-10 23:44:00 【重邮研究森】
2022.8.10今天你刷题了吗?
题目:
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
分析:
给你一个字符串,你需要找出没有重复的字母,然后返回一个下标最小的字母的下标是多少。
思路:对于重复直接哈希,先把所有元素插入哈希表中,可以得到每个元素的重复次数。接着遍历这个哈希,找到次数为1的第一个元素。注意,在第二次遍历的时候,我们是按字符串下标开始遍历,举个例子
for(int i=0;i<s.size();i++)
那么在i=0时,我们需要判断s【i】在哈希中的次数是否为1,如果不是,则下一个。
那么在i=1时,我们又判断次数是否为1,如果是则直接返回下标。
解析:
1.哈希表
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char, int>map;
for (auto num : s)
{
map[num]++;
}
for (int i = 0; i < s.size(); i++)
{
if (map[s[i]] == 1)
{
return i;
}
}
return -1;
}
};2.哈希映射
这里的区别在于,哈希表存放的元素为(元素,下标),但次数只有-1和下标.对于重复元素直接给-1.然后下一个遍历就直接遍历次数为1的哈希表,并且判断谁的下标最小就是谁
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char, int>map;
for (int i = 0; i < s.size(); i++)
{
if (map.count(s[i]))
{
map[s[i]] = -1;
}
else
{
map[s[i]] = i;
}
}
int first = s.size();
for (auto num : map)
{
if (num.second != -1 && num.second < first)
{
first = num.second;
}
}
if (first == s.size())
{
return -1;
}
return first;
}
};边栏推荐
猜你喜欢
随机推荐
【C语言】C语言程序设计:动态通讯录(顺序表实现)
Talk预告 | 中国科学技术大学和微软亚洲研究院联合培养博士生冷燚冲:语音识别的快速纠错模型FastCorrect
【C语言篇】操作符之 位运算符详解(“ << ”,“ >> ”,“ & ”,“ | ”,“ ^ ”,“ ~ ”)
2022下半年软考「高项」易混淆知识点汇总(2)
10. Notes on receiving parameters
[C language] binary search (half search)
C语言篇,操作符之 移位运算符(>>、<<)详解
C language% (%d,%c...)
MySQL数据库基础操作
IEEE的论文哪里可以下载?
9. Rest style request processing
ROS实验笔记之——安装QPEP以及Intel-MKL
安科瑞为工业能效行动计划提供EMS解决方案-Susie 周
开源一夏 | 参与开源能让人更幸福
高校就业管理系统设计与实现
【C语言】猜数字游戏的实现
C194铜合金C19400铁铜合金
22年全国程序员1月薪资出炉,才知道年薪 40 万以上的有这么多?
闭包详解,柯里化的含义及操作方法
C language, operators of shift operators (> >, < <) explanation

![[C language] binary search (half search)](/img/24/4e7b54963ac9df4a3244232c32c435.png)







