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"]

解题思路

  1. 构建字典树Trie,将words中的词全部插入到Trie中。
  2. 深度优先搜索,遍历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)相关推荐

  1. 【每日一题】212. 单词搜索 II

    212. 单词搜索 II 题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻 ...

  2. leetcode: 212. 单词搜索II

    212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...

  3. Leetcode系列-字符串-单词搜索II

    单词搜索II理解与分析 题目大意(原题参见leetcode官网) 给定一个单词列表和二维字符网格,找到网格中所有存在于单词列表中的单词并返回.单词与网格中都只包含小写字母. 解题思路 方法一(效率低, ...

  4. Java实现 LeetCode 212 单词搜索 II(二)

    212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

  5. LeetCode 212. 单词搜索 II(Trie树+DFS)

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  6. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  7. leetcode 212:单词搜索II

    题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...

  8. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

  9. leetcode212. 单词搜索 II

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

最新文章

  1. linux python2和python3共存_linux-Centos7安装python3并与python2共存
  2. 【算法】弗洛伊德(Floyd)算法
  3. Javascript 中 null、NaN和undefined的区别
  4. js 区分 safari chrome iso
  5. 用UDEV服务解决RAC ASM存储设备名
  6. 数据库类型少_DELETE与DROP 在数据库中的使用方法和区别
  7. 将华氏温度转化成摄氏度和绝对温度
  8. idea package放在什么位置_NBA现役球员大排名,你会把20岁的东契奇放在什么位置?...
  9. python输出隔4个字符_python怎么实现每隔几个字符分割
  10. 【BZOJ】1176: [Balkan2007]Mokia(cdq分治)
  11. 低版本向日葵本机识别码和验证码提取
  12. 斐讯k2 怎么开虚拟服务器,求助各位大神,K2P怎么开启SSH
  13. QT 跨平台 代码框架
  14. Windows10卸载密钥导致win10未激活--解决
  15. CodeWars刷题练习
  16. 数据结构6-1:什么是图
  17. 【31】GPU(下):为什么深度学习需要使用GPU?
  18. 2021-09-15小记西数3T蓝盘翻车
  19. ARM惹众怒,美国芯片行业也开始抛弃它,跟随中国芯片支持新架构
  20. 一个木函工具桌面测试版,支持Linux MacOS Windows

热门文章

  1. vue上传文件到Minio
  2. win10 修改Redis配置文件
  3. 超级好的Sql Server数据库开发与管理软件--Toad for SQL Server
  4. SpringBoot项目接入支付宝第三方登录
  5. Volatile-3.禁止指令重排
  6. Linux实战教学笔记14:用户管理初级(上)
  7. 苹果要求全新App开发四月起必须支持“齐刘海”
  8. jsPdf+html2Canvas+react实现前端页面导出pdf,并解决jspdf分页图片过长截断问题
  9. Java 脚本引擎的使用
  10. 装饰模式,制作一个蛋糕java