剑指Offer_编程题:字符流中第一个不重复的字符

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

有的时候思路就很狭窄,记得之前说用指针做,就一直想着用指针。。。但是这道题还不是这样的。。。。用字典。。。将字节流保存起来,通过哈希表统计字符流中每个字符出现的次数,顺便将字符流保存在string中,然后再遍历string,从哈希表中找到第一个出现一次的字符。具体实现:引入两个辅助存储空间。一个Dict存储当前出现的字符以及字符出现的次数,一个List存储当前出现字符。然后每次比较List的第一个字符在Dict中对应的次数,如果为1则输出这个字符,如果不为1则弹出这个字符比较下一个字符。

要注意的是,字符流!!不是直接输入一个字符串,而是先输入a,然后再进去一个b,是一个个进入的!!还有要注意!这道题有两个函数,而有一个函数是没有参数的,所以要初始化用到全局变量!!!

# -*- coding:utf-8 -*-
class Solution:
    # 返回对应char
    def __init__(self):
        self.adict = {}
        self.alist = []

    def FirstAppearingOnce(self):
        # write code here
        while len(self.alist) > 0 and self.adict[self.alist[0]] != 1:
            self.alist.pop(0)
        if not self.alist:
            return '#'
        return self.alist[0]  

    def Insert(self, char):
        # write code here
        if char not in self.adict.keys():
            self.alist.append(char)
            self.adict[char] = 1
        else:
            self.adict[char] += 1

猜你喜欢

转载自blog.csdn.net/mengmengdajuanjuan/article/details/81254541