天天看点

【字符串】字符流中第一个不重复的字符

题目:

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"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,说明全是重复的字符 ,此时返回#