问题:
题目来源:力扣(LeetCode)
难度:中等
分析:
本题分为两部分,一部分是需要在网格中找到所有可能的字母组合;一部分是判断找到的组合是否是在字典中存在。按照这种思路,我们可以使用回溯法。
现在我们得到了一个最容易想到的回溯法,那么是否有方法可以进行优化呢?我们观察到在回溯的过程中,根据样例,如果我们前两个字母找到的是ob,那么就可以提前停止回溯了,因为字典中不存在ob开头的字符串。
那么我们如何快速判断字典中是否存在以ob开头的字符串呢?这就需要用到Trie树了。
解题步骤:
先根据字典构建Trie树,用于快速比较在网格中搜索到的字母组合是否是字典中出现的。然后在网格中用DFS搜索可能的字母组合,每一步搜索都进行判断字典中是否存在以到本步为止的字母组合为开头的字符串,及时进行剪枝。这样就极大地减少了复杂度。
感谢麦麦大佬分享的超简洁python写法。
麦麦原链接地址
解决方法:
1:
class Solution:
def findWords(self, board: List[List[str]], words: List[str]) -> List[str