Leetcode 387. 字符串中的第一个唯一字符
思路
首先想到的是暴力解法:顺序遍历数组,对于每个字符,看看它后面有没有相同字符,如果有则跳过本次循环,如果没有则返回该字符的下标。
后来感觉这个方法时间复杂度比较高,就想到了利用hash表:将所有字符放进hash表,并统计每个字符出现的次数,然后再遍历数组,利用hash表找出出现次数为1的首个字符。
代码
int firstUniqChar(string s) {
unordered_map<char, int> mp; //字符-出现字数
int res = -1;
for (int i = 0; i < s.size(); i++) { //将所有字符放进hash表,并统计出现次数
mp[s[i]] ++;
}
for (int j = 0; j < s.size(); j++) { //再次顺序遍历数组,将首个出现次数为1的字符下标返回
if (mp[s[j]] == 1) {
res = j;
break;
}
}
return res;
}