题目:
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
思路:
由于该字符流长度不确定,所以存到列表中进行操作,比较方便。
在此第一反应就是使用字典,key存放字符,value代表次数。输出第一个value为1的key值即可
class Solution:
# 返回对应char
def __init__(self):
self.charDict = {} #存放字符和对应的数量
self.charlist = [] #存放字符
def FirstAppearingOnce(self): #判断函数
for key in self.charlist: #假如key对应的value为1,返回key
if self.charDict[key]==1:
return key
return '#'
def Insert(self, char):
# write code here
self.charDict[char]=1 if char not in self.charDict else self.charDict[char]+1
#这里是将输入的字符串放进字典中
self.charlist.append(char)
#将输入的字符放进列表中
使用字典的话,容易想到,但是实现起来稍微有点复杂,占用空间稍大。
改进:
使用count函数,统计出现字符出现的次数,当遇到第一个不重复的字符后,输出并且返回。
此时不进行后边不重复字符的输出。
class Solution:
# 返回对应char
def __init__(self): # 初始化列表
self.charList = []
def Insert(self, char): # 将输入的char字符串存入列表中,然后对该列表进行操作
self.charList.append(char)
def FirstAppearingOnce(self):
for i in self.charList: # 遍历列表,使用count函数统计列表中出现次数为1的
if self.charList.count(i) == 1: #是的话就返回,没有出现一次的就返回
print(i)
return i #return的作用:遇到第一个不重复的就直接返回即可
return '#' #如果前一个没有return,说明全是重复的字符 ,此时返回#