183 - 212 单词搜索2

题目

给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例:

输入: words = ["oath","pea","eat","rain"] and board = [ ['o','a','a','n'], ['e','t','a','e'], ['i','h','k','r'], ['i','f','l','v'] ]

输出: ["eat","oath"]

说明:

  • 你可以假设所有输入都由小写字母 a-z 组成。

提示:

  • 你需要优化回溯算法以通过更大数据量的测试。你能否早点停止回溯?

  • 如果当前单词不存在于所有单词的前缀中,则可以立即停止回溯。什么样的数据结构可以有效地执行这样的操作?散列表是否可行?为什么? 前缀树如何?如果你想学习如何实现一个基本的前缀树,请先查看这个问题: 实现Trie(前缀树)。

解答

根据提示,应该把words里面单词插入前缀树里面,回溯的时候调用startwith,如果没有了就弹出

字典树

https://leetcode-cn.com/problems/word-search-ii/solution/qian-zhui-shu-dfs-by-powcai/

这个就没用前缀树,就比较好理解吧😂

Runtime: 280 ms, faster than 82.03% of Python3 online submissions for Word Search II.

Memory Usage: 28.7 MB, less than 91.67% of Python3 online submissions for Word Search II.

前缀树

https://leetcode.com/problems/word-search-ii/discuss/59790/Python-dfs-solution-(directly-use-Trie-implemented).

Runtime: 440 ms, faster than 30.82% of Python3 online submissions for Word Search II.

Memory Usage: 36 MB, less than 66.67% of Python3 online submissions for Word Search II.

Last updated

Was this helpful?