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