天天看點

【字元串】字元流中第一個不重複的字元

題目:

請實作一個函數用來找出字元流中第一個隻出現一次的字元。例如,當從字元流中隻讀出前兩個字元"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,說明全是重複的字元 ,此時傳回#