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

1. 题目

给定一个二维网格 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 组成。

类似题目:LeetCode 79. 单词搜索(回溯DFS)

2. Trie树+DFS

  • 先将单词插入Trie树
  • 再遍历board中的每个字符,以每个字符为起点DFS在Trie中查找
class TrieNode
{
public:string str;TrieNode *next[26];bool isEnd;TrieNode():isEnd(false) {memset(next, 0, sizeof(TrieNode*)*26);}
};
class Trie
{
public:TrieNode *root;Trie(){root = new TrieNode();}~Trie(){destroy(root);}void destroy(TrieNode *root){if(root == NULL)return;for(int i = 0; i < 26; i++)destroy(root->next[i]);delete root;}void insert(string word){TrieNode *cur = root;for(char s:word){if(cur->next[s-'a'] == NULL)cur->next[s-'a'] = new TrieNode();cur = cur->next[s-'a'];}cur->isEnd = true;cur->str = word;//存储该单词}
};class Solution {Trie tree;
public:vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {for(auto word : words)tree.insert(word);int i, j;vector<string> ans;for(i = 0; i < board.size(); ++i)for(j = 0; j < board[0].size(); ++j)dfs(board,tree.root,i,j,ans);return ans;}void dfs(vector<vector<char>>& b, TrieNode *cur, int x, int y, vector<string> &ans){if(cur->isEnd)//先检查字符是不是,而不是坐标,万一坐标出界,但是当前字符串结尾{cur->isEnd = false;//该单词取出,放入答案,关闭ans.push_back(cur->str);return;}if(x < 0 || x == b.size() || y < 0 || y == b[0].size()) return;if(b[x][y] == '#' || !cur || (b[x][y] != '#' && cur->next[b[x][y]-'a'] == NULL))return;char ch = b[x][y];cur = cur->next[ch-'a'];b[x][y] = '#';	//标记走过dfs(b,cur,x+1,y,ans);dfs(b,cur,x-1,y,ans);dfs(b,cur,x,y+1,ans);dfs(b,cur,x,y-1,ans);b[x][y] = ch;	//恢复现场}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研究综述 | 多关系知识图谱表示学习综述

作者 | CHEONG转载自公众号 | 机器学习与自然语言处理本文分享一篇多关系知识图谱表示学习汇报ppt&#xff0c;介绍近几年及2020新出的共七篇处理异质图的模型。先列出该汇报ppt中将要介绍的七篇论文&#xff1a;Motivation异质知识图谱研究的对象便是如何处理多关系知识图谱&a…

PaddleHub教程合集

原文链接&#xff1a;https://aistudio.baidu.com/aistudio/projectdetail/2168053 PaddleHub教程合集 PaddleHub是基于PaddlePaddle生态下的预训练模型管理和迁移学习工具&#xff0c;可以结合预训练模型更便捷地开展迁移学习工作。通过PaddleHub&#xff0c;您可以&#xff1…

人物志 | KDD Cup 2017双料冠军燕鹏

2017年数据挖掘领域最有影响力的赛事KDD Cup近日揭晓&#xff0c;Convolution队从全球70个国家的3582支队伍里脱颖而出&#xff0c;包揽两项任务的冠军。这支双料冠军队成员名单里&#xff0c;有一个我们熟悉的名字——美团点评高级技术专家燕鹏。 说燕鹏可能大家并不一定知道&…

论文浅尝 - IJCAI2020 | KGNN:基于知识图谱的图神经网络预测药物与药物相互作用...

转载公众号 | AI TIME 论道药物间相互作用&#xff08;DDI&#xff09;预测是药理学和临床应用中一个具有挑战性的问题&#xff0c;在临床试验期间&#xff0c;有效识别潜在的DDI对患者和社会至关重要。现有的大多数方法采用基于AI的计算模型&#xff0c;通常倾向于集成多个数…

LeetCode 79. 单词搜索(回溯DFS)

1. 题目 给定一个二维网格和一个单词&#xff0c;找出该单词是否存在于网格中。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board [[…

中文BERT上分新技巧,多粒度信息来帮忙

文 | ????????????????自然语言处理实在是太难啦&#xff01;中文尤其难&#xff01;相比于英文&#xff0c;中文是以词作为语义的基本单位的&#xff0c;因此传统的中文 NLP 都需要先进行分词。分词这步就劝退了很多人&#xff0c;比如“研究生活很充实”&…

监控平台前端SDK开发实践

监控是提高故障处理能力和保障服务质量必需的一环&#xff0c;它需要负责的内容包括&#xff1a;及时上报错误、收集有效信息、提供故障排查依据。 及时上报错误&#xff1a;发生线上问题后&#xff0c;经由运营或者产品反馈到开发人员&#xff0c;其中流转过程可能是几分钟甚至…

论文浅尝 - WWW2020 | 通过对抗学习从用户—项目交互数据中挖掘隐含的实体偏好来用于知识图谱补全任务...

笔记整理 | 陈湘楠&#xff0c;浙江大学在读硕士。现有的知识图谱补全方法都在试图设计全新的学习算法&#xff0c;来使用已知的事实信息去推理知识图谱中的潜在语义。但随着知识图谱的广泛使用&#xff0c;知识图谱中的许多实体对应着应用程序系统的在线项目。但知识图谱和应用…

LeetCode 24. 两两交换链表中的节点(递归+循环)

1. 题目 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3.2. 解题 2.1 递归 class Solut…

美团数据平台融合实践

本文根据作者在2017年ArchSummit的分享记录整理而成。 互联网格局复杂多变&#xff0c;大规模的企业合并重组不时发生。原来完全独立甚至相互竞争的两家公司&#xff0c;有着独立的技术体系、平台和团队&#xff0c;如何整合&#xff0c;技术和管理上的难度都很大。2015年10月&…

CMU MILA 谷歌 | 三家巨头发布史上最干文本增强总结

文 | Sherry一直以来&#xff0c;数据都是推动深度神经网络这个人工智能引擎不可或缺的燃料&#xff1b;然而人工收集足量而优质的数据从来不是一件“便宜”的事&#xff0c;数据增强便是一座富有价值的矿山。在CV中&#xff0c;翻转&#xff0c;裁剪&#xff0c;加噪声等方法被…

论文浅尝 - AAAI2021 | 从历史中学习:利用时间感知拷贝生成网络建模时态知识图谱...

笔记整理 | 朱珈徵&#xff0c;天津大学硕士链接&#xff1a;https://arxiv.org/pdf/2012.08492.pdf动机大型知识图通常会增长以存储时态事实&#xff0c;这些时间事实对实体沿时间线的动态关系或交互进行建模。因为这样的时态知识图经常遭受不完全性的困扰&#xff0c;所以开发…

LeetCode 96. 不同的二叉搜索树(DP)

1. 题目 给定一个整数 n&#xff0c;求以 1 … n 为节点组成的二叉搜索树有多少种&#xff1f; 示例:输入: 3 输出: 5 解释: 给定 n 3, 一共有 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ \3 2 1 1 3 2/ …

Android漏洞扫描工具Code Arbiter

目前Android应用代码漏洞扫描工具种类繁多&#xff0c;效果良莠不齐&#xff0c;这些工具有一个共同的特点&#xff0c;都是在应用打包完成后对应用进行解包扫描。这种扫描有非常明显的缺点&#xff0c;扫描周期较长&#xff0c;不能向开发者实时反馈代码中存在的安全问题&…

领域应用 | OMAHA联盟发布“疾病临床表现”、“中毒”知识图谱及OMAHA知识库

转载公众号 | OMAHA联盟资源发布OMAHA已建立“七巧板”医学术语集、“汇知”医学知识图谱、元数据等资源&#xff0c;将于每月发布其中一项。具体各项发布时间为&#xff1a;“七巧板”术语集于每季度第一个月20日发布&#xff0c; “汇知”图谱于每季度第二个月20日发布&#…

聊聊推荐系统中的偏差

文 | 成指导源 | 知乎背景推荐系统中大量使用用户行为数据&#xff0c;作为系统学习的标签或者说信号。但用户行为数据天生存在各式各样的偏差&#xff08;bias&#xff09;&#xff0c;如果直接作为信号的话&#xff0c;学习出的模型参数不能准确表征用户在推荐系统中的真实行…

云端的SRE发展与实践

本文根据作者在美团点评第21期技术沙龙的分享记录整理而成。 SRE&#xff08;Site Reliability Engineering&#xff09;是Google于2003年提出的概念&#xff0c;将软件研发引入运维工作。现在渐渐已经成为各大互联网公司技术团队的标配。 美团点评作为综合性多业务的互联网生活…

一种单独适配于NER的数据增强方法:DAGA

链接&#xff1a;http://www.elecfans.com/d/1468784.html 本文首先介绍传统的数据增强在NER任务中的表现&#xff0c;然后介绍一种单独适配于NER的数据增强方法&#xff0c;这种方法生成的数据更具丰富性、数据质量更高。0 前言 在NLP中有哪些数据增强技术&#xff1f;这一定是…

LeetCode 80. 删除排序数组中的重复项 II

1. 题目 给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素最多出现两次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 来源&#xff1a;力扣…