当前位置:网站首页 > 技术博客 > 正文

字典树算法



2020年9月29日 周二 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】



直观想法是按照 LeetCode 79. 单词搜索(DFS+回溯)的思路,对中的每一个字符串都进行遍历,但是这样的话时间复杂度太高。我们可以借助字典树来简化搜索过程,具体思路是:对中的单词构建字典树——>从图中的每个位置出发 ——> 从字典树中,看遍历过程中是否遇到了 中的某个单词。

遍历过程需要解决几点问题:

  1. 如何避免遍历时,字符被重复使用?
  2. 如何获取符合条件的字符串?
  3. 如何避免字符串的重复遍历?

第一个问题相对好解决,我们在 LeetCode 79. 单词搜索(DFS+回溯)中已经学会了如何解决这个问题,在不更改输入矩阵 的情况下,最好的办法是建立一个矩阵,将已经遍历过的字符标记为,遍历完4个方向再改为,因为后面可能还要用到这个字符。之所以在 LeetCode 79. 单词搜索(DFS+回溯)这题中,不建议将遍历过的字符修改成特殊字符然后再改回来,是因为一旦搜索到存在这个字符串,程序就会提前结束,修改成特殊字符的那些字符不会被修改回去,导致输入矩阵被我们人为改变了,这是需要极力避免的。但是在本题中,我们可以用修改成特殊字符的方法,原因是不论最后能不能找到需要的字符串,都能回溯回去还原字符。 这一点和 LeetCode 79. 单词搜索(DFS+回溯)不同,可以仔细对比一下两题的代码。

对于第二个问题,我们可以改进字典树,将换成,意思为如果以这个字符结尾能构成字符串,就设置为这个字符串,否则为空。 这样就方便存储符合条件的字符串了。

第三个问题解决后,第三个问题也就迎刃而解了,一旦发现符合条件的字符串,就保存下来,也就是,然后将设置为空,表明这个字符串已经被找到了,后面就不会再重复添加。

具体代码如下:

 
    

在这里插入图片描述
在这里插入图片描述


https://leetcode-cn.com/problems/word-search-ii/solution/c-jian-dan-qing-xi-de-trieshu-ti-jie-by-talanto_li/

https://leetcode-cn.com/problems/word-search-ii/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-44/

https://leetcode-cn.com/problems/word-search-ii/solution/dan-ci-sou-suo-ii-by-leetcode/

版权声明


相关文章:

  • java项目讲解视频2025-06-03 15:30:01
  • rman常用命令2025-06-03 15:30:01
  • monkey测试工具下载2025-06-03 15:30:01
  • js 注释2025-06-03 15:30:01
  • 专门提供破解软件的网站2025-06-03 15:30:01
  • c语言指针数组经典题目详解2025-06-03 15:30:01
  • c语言中指针函数2025-06-03 15:30:01
  • 如何做游戏测试员2025-06-03 15:30:01
  • openapi webapi2025-06-03 15:30:01
  • c&c c语言2025-06-03 15:30:01