方法一:使用哈希表存储频数
我们可以对字符串进行两次遍历。
- 在第一次遍历时,我们使用哈希映射统计出字符串中每个字符出现的次数。
- 在第二次遍历时,我们只要遍历到了一个只出现一次的字符,那么就返回它的索引,否则在遍历结束后返回 -1。
class Solution:
def firstUniqChar(self, s: str) -> int:
hashmap = Counter(s)
for i, ch in enumerate(s): # 遍历字符串, 判断字符个数
if hashmap[ch] == 1:
return i
return -1
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 s s s 的长度。我们需要进行两次遍历。
- 空间复杂度: O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣),其中 Σ \Sigma Σ 是字符集,在本题中 s s s 只包含小写字母,因此 ∣ Σ ∣ ≤ 26 |\Sigma| \leq 26 ∣Σ∣≤26。我们需要 O ( ∣ Σ ∣ ) O(|\Sigma|) O(∣Σ∣) 的空间存储哈希映射。