给定一个字符串 s
,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1
。
先遍历一遍,把所有元素及其出现次数记录在一个哈希表中,在遍历一遍将只出现一次元素的下标返回。
class Solution {
public:
int firstUniqChar(string s) {
unordered_map<char,int> temp;
for(char c : s)
{
temp[c]++;
}
for(int i =0 ;i<s.size();i++)
{
if(temp[s[i]]==1){
return i;
}
}
return -1;
}
};
方法二:
第一次遍历字符串,将元素添加进哈希表中,出现过一次以上的value记为-1,仅出现过一次的value记为它的下标位置,第二次遍历哈希表找到最小的value值返回。
class Solution {
public:
int firstUniqChar(string s) {
int n = s.size();
unordered_map<char,int> map1;
for(int i =0;i<n;i++){
if(map1.count(s[i])){
map1[s[i]] = -1;
}else {
map1[s[i]] = i;
}
}
int position = n;
for(auto [_,pos] : map1){
if(pos != -1 && pos <position){
position = pos;
}
}
if(position == n){
return -1;
}
return position;
}
};