第一个只出现一次的字符
题目
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
0 < = s . l e n g t h < = 50000 0 <= s.length <= 50000 0<=s.length<=50000
思路 哈希表
C++:建立一个哈希表存放每个字符出现的次数(unordered_map)
python:
(1)用字典代表哈希表
(2) 遍历字符串 s 中的每个字符 c:
- 若字典中不包含键(key) c ,则向 dic 中添加键值对 (c, True) ,代表字符 c 的数量为1
- 若字典中包含键(key) c :则修改键 c 的键值对为 (c, False) ,代表字符 c 的数量 >1 。
(3)执行一次遍历即可找到第一个出现1此的字符
第(2)步做完后,s中所有出现的字符都在字典中,出现1次的value=True,多次的value=False
C++
class Solution {
public:
char firstUniqChar(string s) {
unordered_map<char, int> hash;
vector<char> res;
for(int i=0; i<s.size(); ++i)
{
if(!hash[s[i]]) //未出现过
res.push_back(s[i]);
++hash[s[i]]; //更新哈希表
}
for(int i=0; i<s.size(); ++i)
if(hash[s[i]]==1)
return s[i];
return ' ';
}
};
python
class Solution:
def firstUniqChar(self, s: str) -> str:
hashmap = {}
res = []
for c in s:
hashmap[c] = not c in hashmap
for c in s:
if hashmap[c]:
return c
return ' '