第一个只出现一次的字符——哈希表的应用

《剑指offer》35题:找出字符串中第一个只出现一次的字符,例如abaccdeff输出b

普通的每次都查看字符之前有没有出现过的算法复杂度是O(n^2)
我们用大小为26个字母(假设只有字母)的字典或者列表记录下最早出现的位置和出现的次数。

MAX_INDEX = 99999999999
def get_no_repeting_char(str = 'abcdefa'):
    hash_table = {}
    chars = list(str)

    # 字典每个键值都是一个两个元素的列表,列表第一个是最开始出现的index,第二个是出现的次数
    for index,item in enumerate(chars):
        if item in hash_table.keys():
            hash_table[item][1] += 1
        else:
            hash_table[item] = [index,1]

    earliest_index = MAX_INDEX
    no_repeting_char = None
    for key,value in hash_table.items():
        # print('{}-{}'.format(key,value))
        if value[1] == 1 and value[0] < earliest_index:
            earliest_index = value[0]
            no_repeting_char = key

    return (no_repeting_char,earliest_index)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0x01 目录 常见编码: ASCII编码 Base64/32/16编码 shellcode编码 Quoted-p...
    H0f_9阅读 13,115评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,107评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,020评论 25 709
  • 我们常常会被生活困住灵魂:周而复始的一日行程,繁琐扰人的生活细节,疲劳困顿的各种压力,渴望不得的无数焦虑...
    贺佩佩阅读 462评论 2 7
  • 林渺回来了,借了小小和子淑的笔记看。 晓晴说,你不在我好无聊呀。 林渺也不抬头,就问她,我不在你就无聊,那认识我之...
    何青猊阅读 191评论 0 1