zoukankan      html  css  js  c++  java
  • 算法试题

    题目

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

    思路

    思路:引入两个辅助存储空间。一个Dict存储当前出现的字符以及字符出现的次数,一个List存储当前出现字符。
    然后每次比较List的第一个字符在Dict中对应的次数,如果为1则输出这个字符,如果不为1则弹出这个字符比较下一个字符。

    答案

    标准答案

    # -*- coding:utf-8 -*-
    class Solution:
        # 返回对应char
        def __init__(self):
            # 存储当前字符
            self.alist = []
            # 存储当前字符及其出现次数,出现大于1次,就设成2次
            self.adict = {}
    
        def FirstAppearingOnce(self):
            # write code here
            while len(self.alist) > 0 and self.adict[self.alist[0]] == 2:
                self.alist.pop(0)
            if len(self.alist) == 0:
                return '#'
            else:
                return self.alist[0]
    
        def Insert(self, char):
            # write code here
            if char not in self.adict.keys():
                self.adict[char] = 1
                self.alist.append(char)
            else:
                self.adict[char] = 2

    自我实现答案

    class Firstone:
        def __init__(self, s):
            self.di = {}
            self.li = []
            self.s = s
    
        def ins(self):
            for i in self.s:
                if not self.di.get(i, ""):
                    self.di[i] = 1
                    self.li.append(i)
                else:
                    self.di[i] = 2
            return self.di, self.li
    
        def findfirstone(self):
            for i in self.li:
                if self.di[i] == 1:
                    return i
            return 0
    
    
    findone = Firstone(s)
    
    print(findone.ins())
    print(findone.findfirstone())
  • 相关阅读:
    札记:计算机网络篇:物理层
    vs2012 它已停止工作
    php laravel 帧 该文件上传
    2016第一周日
    2015年第1周六
    2016第1周五优化自己
    2016值得关注的语言平台、JS框架
    JS模块化规范CommonJS,AMD,CMD
    2016第1周二
    ReactJS入门教程
  • 原文地址:https://www.cnblogs.com/shijieli/p/10802622.html
Copyright © 2011-2022 走看看