《剑指Offer》刷题之字符流中第一个不重复的字符
我不知道将去向何方,但我已在路上! |
---|
时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! |
- 题目:
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
如果当前字符流没有存在出现一次的字符,返回#字符。 - 代码1:
class Solution:
def __init__(self):
self.que = []
def FirstAppearingOnce(self):
result = list(filter(lambda c:self.que.count(c)==1, self.que))
return result[0] if result else '#'
def Insert(self, char):
self.que += char
- 算法说明:
filter() 函数 :
函数语法:filter(function, iterable)
函数描述:filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中
举例:输入:newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),输出:[1, 3, 5, 7, 9]
lambda 函数 :
函数语法:lambda 形参列表 : 函数返回值表达式语句
函数描述:lambda 表达式是Python中一类特殊的定义函数的形式,使用它可以定义一个匿名函数
举例:输入:li=[{“age”:20,“name”:“def”},{“age”:25,“name”:“abc”},{“age”:10,“name”:“ghi”}]
li=sorted(li, key=lambda x:x[“age”]),输出:li=[{‘age’: 10, ‘name’: ‘ghi’}, {‘age’: 20, ‘name’: ‘def’}, {‘age’: 25, ‘name’: ‘abc’}]
算法解释:
最外层是列表函数;
进一层是filter()
函数,过滤掉列表que
中个数不为1的元素;
个数不为1的计算方式用lambda
函数进行表达。