leetcode387. 字符串中的第一个唯一字符
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = “leetcode”
输出: 0
示例 2:
输入: s = “loveleetcode”
输出: 2
示例 3:
输入: s = “aabb”
输出: -1
提示:
1 <= s.length <= 105
s 只包含小写字母
目录
- leetcode387. 字符串中的第一个唯一字符
- 题目分析
- 题目描述
- 算法分析
- 算法步骤
- 算法流程
- 算法代码
- 算法分析
- 复杂度分析
- 易错点
- 注意事项
- 相似题目
- 相似题目
题目分析
题目描述
给定一个字符串 s
,返回它的第一个不重复字符的索引。如果不存在,则返回 -1。
算法分析
这个问题可以通过使用哈希表来解决。我们首先遍历字符串,使用哈希表记录每个字符出现的次数。然后,我们再次遍历字符串,查找第一个出现次数为 1 的字符,并返回其索引。
算法步骤
- 初始化一个空哈希表
q
。 - 遍历字符串
s
,对于每个字符,将其添加到q
并增加其计数。 - 再次遍历字符串
s
,查找第一个在q
中计数为 1 的字符,并返回其索引。 - 如果所有字符都至少出现两次,返回 -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/ |