题解 | #字符流中第一个不重复的字符#
字符流中第一个不重复的字符
http://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720
类似#第一个只出现一次的字符# https://blog.nowcoder.net/n/6aa6f3ed254041a88572510af837616e
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.s=''
self.mydict={}
def FirstAppearingOnce(self):
for i in self.s:
if self.mydict[i]==1:
return i
return '#'
def Insert(self, char):
self.s=self.s+char
if char not in self.mydict:
self.mydict[char]=1
else:
self.mydict[char]=self.mydict[char]+1
- 根据后台输入方式来设计函数
后台会用以下方式调用 Insert 和 FirstAppearingOnce 函数: 循环遍历字符串里的每一个字符ch { Insert(ch); caseout += FirstAppearingOnce() }
所以insert函数是逐个字符输入进去的,自变量char表示输入一个字符。FirstAppearingOnce函数要求逐次返回的一个字符(当前字符流只出现一次的那个字符)。
2.设计函数。Insert函数用来记录,插入char后,每个字符出现的次数。FirstAppearingOnce用来对每个字符查哈希表,返回第一个计数为1的字符。
3.小提示:这里要设计初始化__init__方法,使得实例一开始就拥有类模板所具有的属性。如果不这样设计的话,输入的字符串没法连续记录,还有字典也没有初始化。
如果在函数体(准确的说是类的方法),比如Insert里面再初始化字典,会导致每次调用会重新初始化一次。btw,__init__方法就是用来专门干初始化赋属性这活儿,本来就应该在这儿写初始化,加强理解。