「这是我参与2022首次更文挑战的第36天,活动详情查看:2022首次更文挑战」
[剑指 Offer 50. 第一个只出现一次的字符]
难度简单
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = "abaccdeff" 输出:'b' 示例 2:
输入:s = "" 输出:' '
限制:
0 <= s 的长度 <= 50000
考察点:
- 哈希表:
- Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组的某个下标来加快查找速度,但是又和数组、链表、树等数据结构不同,在这些数据结构中查找某个关键字,通常要遍历整个数据结构,也就是O(N)的时间级,但是对于哈希表来说,只是O(1)的时间级。
解题思路:
- 这里用到了字典
- 首先初始化字典,依次将s中字符写入字典
- 遍历字典,判断第一个==1 的就是出现次数为1的值。
class Solution:
def firstUniqChar(self, s: str) -> str:
doc = {}
for row in s:
doc.setdefault(row,0)
doc[row]+=1
for arr,index in doc.items():
if index==1:
return arr
return " "
执行结果:
[面试题32 - I. 从上到下打印二叉树]
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如: 给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
解题思路:
- 先判断特殊情况 root是否为空
- 根据题意,自然而然想到了广度优先搜索(BFS)
- BFS 通常借助 队列 的先入先出特性来实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[int]:
if root == None:
return []
res = []
def bfs(root,res):
tmp = [root]
while len(tmp) > 0:
ans = tmp.pop(0)
res.append(ans.val)
if ans.left != None:
tmp.append(ans.left)
if ans.right != None:
tmp.append(ans.right)
bfs(root,res)
return res