剑指offer --- 字符流中第一个不重复的字符

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

python 字典:

这题会用到python 的字典,也因此可以把字典拿出来看看。之前已经涉及到了比如字符串,然后更多的是列表list,还有就是独一无二的集合set。
https://www.runoob.com/python/python-dictionary.html

在这里插入图片描述

分析题目

题目字符串流一开始还是听懵逼的这是啥,然后看了别人的分析应该是一个个字符的输入如果当前字符是唯一一个的话还是第一个的话那么我们就输出。

那为何用到了字典呢?这里应该是输入一个字母,如果他在字典中,那么这个字母作为key值,他对应的数就会加一否则的话,他就是1.

def Insert(self, char):
    self.s = self.s +char
    if char in self.dict:
        self.dict[char] +=1
    else:
        self.dict[char] =1

所以这里我们就完成了,每个字符串来我们就统计一下,看下他有几个对吧,但是我们要输出的是第一个的唯一一个。因此还要写另一个方法的地方。

def FirstAppearingOnce(self):
    for z in self.s:
        if self.dict[z] == 1:
            return z
    return '#'

所以合并的代码就是如下啦:

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.dict = {}
        self.s = ''
    def FirstAppearingOnce(self):
        for z in self.s:
            if self.dict[z] == 1:
                return z
        return '#'
        # write code here
    def Insert(self, char):
        self.s = self.s +char
        if char in self.dict:
            self.dict[char] +=1
        else:
            self.dict[char] =1
        # write code here

总结来说:首先是字典的作用在这里体现出来,所以我们要非常熟悉什么时候用列表,什么时候用字典,什么时候用集合set,什么时候用字符串等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值