题目描述:
给定一个字符串 s
,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1
。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:输入: s = "loveleetcode"
输出: 2
示例 3:输入: s = "aabb"
输出: -1
提示:
s
只包含小写字母
方法一:数组映射(C++代码)
分析:第一次遍历整个字符串,将每个字符出现的次数存储到数组中;第二次遍历整个字符串,查看数组中出现的对应次数,第一个次数为 1 的字符就是答案。
class Solution {
public:
int firstUniqChar(string s) { //方法一:数组映射
vector<int> v;
v.resize(26);
for(auto& ch : s){
v[ch - 'a']++;
}
for(int i = 0; i < s.size(); i++){
if(v[s[i] - 'a'] == 1){
return i;
}
}
return -1;
}
};
时间复杂度:O(n),其中 n 是字符串 s 的长度。我们需要进行两次遍历。
空间复杂度:O(∣Σ∣),其中 Σ 是字符集,在本题中 s 只包含小写字母,因此 ∣Σ∣≤26。我们需要 O(∣Σ∣) 的数组空间存储。