387. 字符串中的第一个唯一字符
题目描述
给定一个字符串 s
,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1
。
示例 1:
输入: s = "leetcode" 输出: 0
示例 2:
输入: s = "loveleetcode" 输出: 2
示例 3:
输入: s = "aabb" 输出: -1
提示:
1 <= s.length <= 105
s
只包含小写字母
解法
方法一:计数
我们用一个哈希表或者一个长度为 \(26\) 的数组 \(\text{cnt}\) 来存储每个字符出现的次数,然后从头开始遍历每个字符 \(\text{s[i]}\),如果 \(\text{cnt[s[i]]}\) 为 \(1\),则返回 \(i\)。
遍历结束后,如果没有找到符合条件的字符,返回 \(-1\)。
时间复杂度 \(O(n)\),其中 \(n\) 是字符串的长度。空间复杂度 \(O(|\Sigma|)\),其中 \(\Sigma\) 是字符集,本题中字符集为小写字母,所以 \(|\Sigma|=26\)。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|