单词搜索 II(python)
212. 单词搜索 II
- 题目描述
- 解题思路
- 代码
- 时间复杂度分析
题目描述
➡ 题目链接 ⬅
给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。
单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
示例1:
输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"]
输出:["eat","oath"]
解题思路
- 构建字典树
Trie
,将words中的词全部插入到Trie
中。 - 深度优先搜索,遍历
board
,搜索Trie
。
代码
class Solution:def findWords(self, board, words):trie = {}for c in words:tree = triefor i in c:tree = tree.setdefault(i, {})tree['#'] = '#'res = set()m, n = len(board), len(board[0])def dfs(i, j, prev, tree, seen):if '#' in tree:res.add(prev)for di, dj in [(0, 1), (0, -1), (1, 0), (-1, 0)]:new_i, new_j = i+di, j+djif 0 <= new_i < m and 0 <= new_j < n and (new_i, new_j) not in seen and board[new_i][new_j] in tree:dfs(new_i, new_j, prev+board[new_i][new_j], tree[board[new_i][new_j]], seen|{(new_i, new_j)})for i in range(m):for j in range(n):if board[i][j] in trie:dfs(i, j, board[i][j], trie[board[i][j]], {(i, j)})return list(res)
时间复杂度分析
假设m
, n
分别是board
的行数和列数,L
为单词的最大长度,则时间复杂度为O(m×n×4×(3^(L-1)))
其中,m*n
是两层for循环的时间复杂度,4×3^(L-1)
是dfs的时间复杂度,最初(第一步)有四个方向可以搜索(最坏情况),但在接下来的搜索中,只有三个方向可以搜索(不包括从上一步来的方向),即4×3^(L-1)
单词搜索 II(python)相关推荐
- 【每日一题】212. 单词搜索 II
212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...
- leetcode: 212. 单词搜索II
212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...
- Leetcode系列-字符串-单词搜索II
单词搜索II理解与分析 题目大意(原题参见leetcode官网) 给定一个单词列表和二维字符网格,找到网格中所有存在于单词列表中的单词并返回.单词与网格中都只包含小写字母. 解题思路 方法一(效率低, ...
- Java实现 LeetCode 212 单词搜索 II(二)
212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...
- LeetCode 212. 单词搜索 II(Trie树+DFS)
1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...
- 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)
仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...
- leetcode 212:单词搜索II
题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...
- leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...
- leetcode212. 单词搜索 II
给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...
最新文章
- linux python2和python3共存_linux-Centos7安装python3并与python2共存
- 【算法】弗洛伊德(Floyd)算法
- Javascript 中 null、NaN和undefined的区别
- js 区分 safari chrome iso
- 用UDEV服务解决RAC ASM存储设备名
- 数据库类型少_DELETE与DROP 在数据库中的使用方法和区别
- 将华氏温度转化成摄氏度和绝对温度
- idea package放在什么位置_NBA现役球员大排名,你会把20岁的东契奇放在什么位置?...
- python输出隔4个字符_python怎么实现每隔几个字符分割
- 【BZOJ】1176: [Balkan2007]Mokia(cdq分治)
- 低版本向日葵本机识别码和验证码提取
- 斐讯k2 怎么开虚拟服务器,求助各位大神,K2P怎么开启SSH
- QT 跨平台 代码框架
- Windows10卸载密钥导致win10未激活--解决
- CodeWars刷题练习
- 数据结构6-1:什么是图
- 【31】GPU(下):为什么深度学习需要使用GPU?
- 2021-09-15小记西数3T蓝盘翻车
- ARM惹众怒,美国芯片行业也开始抛弃它,跟随中国芯片支持新架构
- 一个木函工具桌面测试版,支持Linux MacOS Windows