1.思路①
- 统计字符出现的顺序和出现次数,存储
- 遍历结果数据,返回第一个次数为1的字符
利用python3 字典存储, key为字符, value为该字符出现的次数, 利用python3 字典保持元素的添加顺序这一特性, 遍历结果字典, 第一个value == 1的字符, 即是所求的数据
from collections import defaultdict
def first_unique(s: str):
# 使用defaultdict 来避免KeyError
dct = defaultdict(int)
for l in s:
dct[l] += 1
for k, v in dct.items():
if v == 1:
return k
return None
2.思路②
第二种方法,不使用有序字典这一特性, 需要维护两个队列, 出现一次的字符,和出现多次的字符. 数据第一次出现时,将数据放到第一个队列, 该字符再次出现, 将数据从第一个队列弹出,放入第二个队列. 最后, 返回第一个队列中的第一个元素即可.
代码如下:
def first_unique(s: str):
unique = []
duplicate = set()
for l in s:
if l not in duplicate:
# 第一次出现该字符, 放入unique队列
if l not in unique:
unique.append(l)
# 该字符第二次出现, 从unique中弹出, 放入duplicate
else:
duplicate.add(unique.pop(unique.index(l)))
try:
return unique[0]
except IndexError:
return None