题目:
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例:s = "abaccdeff",返回 "b" ; s = "" ,返回 " "
限制:0 <= s 的长度 <= 50000
解题思路:
首先遍历字符串s,使用哈希表统计“各字符数量是否>1”,然后再遍历字符串s,在哈希表中找到首个“数量为1的字符”。
步骤:
- 初始化: 字典 (Python)、HashMap(Java)、map(C++),记为 dic ;
- 字符统计: 遍历字符串 s 中的每个字符 c ;若 dic 中 不包含 键(key) c :则向 dic 中添加键值对 (c, True) ,代表字符 c 的数量为 1 ;若 dic 中 包含 键(key) c :则修改键 c 的键值对为 (c, False) ,代表字符 c 的数量 >1 。
- 查找数量为1的字符:遍历字符串 s 中的每个字符 c ;若dic中键 c 对应的值为 True :,则返回 c 。
- 返回 ' ' ,代表字符串无数量为1的字符。
代码:
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = {}
for c in s:
dic[c] = not c in dic
for c in s:
if dic[c]: return c
return ' '
复杂度:
时间复杂度:O(N),N为字符串s的长度,遍历两轮则使用O(N),HashMap查找操作的复杂度为O(1)
空间复杂度:O(1),由于题目指出s只包含小写字母,因此最多有26个不同字符,HashMap存储需占用O(26)=O(1)的额外空间