博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(python版)《剑指Offer》JZ34:第一个只出现一次的字符
阅读量:4090 次
发布时间:2019-05-25

本文共 1478 字,大约阅读时间需要 4 分钟。

在这里插入图片描述

【思路1】哈希表

  1. 初始化: 字典 (Python),记为 dic ;
  2. 字符统计: 遍历字符串 s 中的每个字符 c ;
    • 若 dic 中 不包含 键(key) c :则向 dic 中添加键值对 (c, True) ,代表字符 c 的数量为 1 ;
    • 若 dic 中 包含 键(key) c :则修改键 c 的键值对为 (c, False) ,代表字符 c 的数量 > 1 。
  3. 查找数量为 1 的字符
    遍历字符串 s 中的每个字符 c ;
    若 dic中键 c 对应的值为 True :,则返回 c 。
  4. 返回 ’ ’ ,代表字符串无数量为 1 的字符。

注:

  • not c in dic 整体为一个布尔值;
  • c in dic 为判断字典中是否含有键 c
class Solution:    def firstUniqChar(self, s: str) -> str:        dic = {
} for c in s: dic[c] = not c in dic for c in s: if dic[c]: return c return ' ''''作者:jyd链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/来源:力扣(LeetCode)'''

在这里插入图片描述

在这里插入图片描述

  • 时间复杂度 O(N): N 为字符串 s 的长度;需遍历 s 两轮,使用 O(N) ;HashMap 查找操作的复杂度为 O(1);
  • 空间复杂度 O(1) : 由于题目指出 s 只包含小写字母,因此最多有 26 个不同字符,HashMap 存储需占用 O(26) = O(1) 的额外空间。

【思路2】遍历哈希表查找字符

在哈希表的基础上,有序哈希表中的键值对是 按照插入顺序排序 的。基于此,可通过遍历有序哈希表,实现搜索首个 “数量为 1 的字符”。

哈希表是 去重 的,即哈希表中键值对数量 ≤ 字符串 s 的长度

复杂度同上,不一样的是该法只需遍历一轮字符串s

class Solution:    def firstUniqChar(self, s: str) -> str:        dic = {
} for c in s: dic[c] = not c in dic for k, v in dic.items(): if v: return k return ' ''''作者:jyd链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/来源:力扣(LeetCode)'''

比如 s=‘ababc’,第二轮遍历s 得5次才找到c

而dic={‘a’: False, ‘b’: False, ‘c’:True},遍历dic只需3次找到

在这里插入图片描述

用有序表反而慢了 dic = collections.OrderedDict()

在这里插入图片描述

转载地址:http://dfjii.baihongyu.com/

你可能感兴趣的文章
19 个 JavaScript 常用的简写技术
查看>>
微信小程序:支付系列专辑(开发指南+精品Demo)
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>
iOS开发 支付之银联支付集成
查看>>
iOS开发支付集成之微信支付
查看>>
浅谈JavaScript--声明提升
查看>>
React非嵌套组件通信
查看>>
Websocket 使用指南
查看>>
浏览器兼容性问题解决方案 · 总结
查看>>
一个很棒的Flutter学习资源列表
查看>>
为什么你应该放弃React老的Context API用新的Context API
查看>>
Flutter 布局控件完结篇
查看>>
Koa2初体验
查看>>
Koa 2 初体验(二)
查看>>
Koa2框架原理解析和实现
查看>>
vue源码系列文章good
查看>>
你不知道的Virtual DOM
查看>>
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>