[Lintcode]132. Word Search II /[Leetcode]212. Word Search II

2024-01-02 11:38

本文主要是介绍[Lintcode]132. Word Search II /[Leetcode]212. Word Search II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

132. Word Search II / 212. Word Search II

  • 本题难度: Hard
  • Topic: Data Structure - Tire/DFS

Description

Given a 2D board and a list of words from the dictionary, find all words in the board.

Each word must be constructed from letters of sequentially adjacent cell, where “adjacent” cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once in a word.

Example:

Input:
words = [“oath”,“pea”,“eat”,“rain”] and board =
[
[‘o’,‘a’,‘a’,‘n’],
[‘e’,‘t’,‘a’,‘e’],
[‘i’,‘h’,‘k’,‘r’],
[‘i’,‘f’,‘l’,‘v’]
]

Output: [“eat”,“oath”]

别人的代码

class Solution:#def findWords(self, board: 'List[List[str]]', words: 'List[str]') -> 'List[str]':def findWords(self, board, words):trie = {}for w in words:t = triefor c in w:if c not in t:t[c] = {}t = t[c]t['#'] = '#'res = []for i in range(len(board)):for j in range(len(board[0])):self.find(board, i, j, trie, '', res)return list(set(res))def find(self, board, i, j, trie, path, res):if '#' in trie:res.append(path)if i<0 or i>=len(board) or j<0 or j>=len(board[0]) or board[i][j] not in trie:returntmp = board[i][j]board[i][j] ="@"self.find(board, i+1, j, trie[tmp], path+tmp, res)self.find(board, i, j+1, trie[tmp], path+tmp, res)self.find(board, i-1, j, trie[tmp], path+tmp, res)self.find(board, i, j-1, trie[tmp], path+tmp, res)board[i][j] = tmp

思路
是79. Word Search的升级版。不仅仅用了DFS还用Tire进行了优化。使得查找各个单词时不用依次从头到尾查找,而是共用了前缀。
因为之前没有写过Tire,所以我选择看一看discussion。

字典树

https://blog.csdn.net/chivalrousli/article/details/41487953

Trie的过程

构建一个字典树的方法代码

words = ["oath","pea","eat","rain","peakja","peal"]trie = {} #4339361904
for w in words:#print(trie)t = trie  #4339361904#print(id(t),id(trie))for c in w:if c not in t: #不存在相同前缀的单词已在字典树t[c] = {} #t:4339361904 #t[c]: 4339361976print(id(t),t)t = t[c] #t:4339361976print(id(t),t)print("*****")t['#'] = '#'
print(id(trie))

trie 和初始的t在4339361904:
字典t中key为c的val:{}存储在4339361976中,然后将t指向t[c]的位置,相当于t得到了更新。
tire有点像链表的表头。
【Python】变量类型、变量名、内存地址

  • 时间复杂度
    使用trie 对有相同前缀的单词有优化,但是时间复杂度没变

这篇关于[Lintcode]132. Word Search II /[Leetcode]212. Word Search II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562340

相关文章

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &