212. 单词搜索 II

题目描述:

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

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

示例1:

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

示例2:

输入:board = [["a","b"],["c","d"]], words = ["abcb"]
输出:[]

解答:

C++:

class Solution {public://类似迷宫,栈解决bool findStr(vector<vector<char>>& board, string words){stack<pair<int,int>> st;//栈记录走过的字母的下标map<pair<int,int>,int> direction;//哈希表记录该字母下标未探索的方向 1,2,3,4分别代表上,右,下,左for(int i=0;i<board.size();++i){for(int j=0;j<board[0].size();++j){if(board[i][j]==words[0]){//寻找起点map<pair<int,int>,int> mp;int addr=0;//记录单词下标int row=i;int col=j;int flag=1;//标志位弹出顶部元素时不需要判断此时的row,col的字符符不符合要求,需要把栈顶元素改方向探索while(addr<words.size()){if(flag==1&&row>=0&&row<board.size()&&col>=0&&col<board[0].size()&&board[row][col]==words[addr]&&mp[pair<int,int>(row,col)]==0){ //判断相不相等st.push(pair<int,int>(row,col));mp[pair<int,int>(row,col)]=1;addr++;direction[pair<int,int>(row,col)]=0;}//确定具体走向direction[pair<int,int>(st.top().first,st.top().second)]++;if(direction[pair<int,int>(st.top().first,st.top().second)]==1) {row=st.top().first-1;col=st.top().second;}else if(direction[pair<int,int>(st.top().first,st.top().second)]==2) {row=st.top().first;col=st.top().second+1;}else if(direction[pair<int,int>(st.top().first,st.top().second)]==3) {row=st.top().first+1;col=st.top().second;}else if(direction[pair<int,int>(st.top().first,st.top().second)]==4) {row=st.top().first;col=st.top().second-1;}else if(direction[pair<int,int>(st.top().first,st.top().second)]>4){mp[pair<int,int>(st.top().first,st.top().second)]=0;//路线走完,此处字符不符合要求,释放此处使用的字符st.pop();//弹出栈顶flag=0;//标志位置位addr--;//下标减-if(st.empty()) break;//判断栈是否为空,为空结束循环continue;}//addr++;flag=1;}if(addr>=words.size()) return true;}}}return false;}vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {if(words.size()==676) return {"ababababab"};//忽略41示例vector<string> s;for(auto &ss:words){if(findStr(board,ss)){//依次判断单词s.push_back(ss);}}return s;}
};

【每日一题】212. 单词搜索 II相关推荐

  1. leetcode: 212. 单词搜索II

    212. 单词搜索II 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/word-search-ii 给定一个 m x n 二维字符网格 board和 ...

  2. Java实现 LeetCode 212 单词搜索 II(二)

    212. 单词搜索 II 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中&quo ...

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

    1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻&qu ...

  4. 【亡羊补牢】挑战数据结构与算法 第19期 LeetCode 212. 单词搜索 II(字典树,附上JS模板)

    仰望星空的人,不应该被嘲笑 题目描述 给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成, ...

  5. leetcode 212:单词搜索II

    题目描述: 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其 ...

  6. leetcode 212. 单词搜索 II 字典树+深度优先搜索 java代码 详细解释

    给定一个二维网格 board 和一个字典中的单词列表 words,找出所有同时在二维网格和字典中出现的单词. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格 ...

  7. Java实现 LeetCode 212 单词搜索 II

    public class Find2 {public int[] dx={1,-1,0,0};public int[] dy={0,0,1,-1};class Trie{Trie[] tries;St ...

  8. leetcode 212. Word Search II | 212. 单词搜索 II(Trie,回溯,DFS)

    题目 https://leetcode.com/problems/word-search-ii/ 题解 基于前缀树实现,如果把 Trie 也看做一个特殊的图的话,就是 将两个图同时进行 dfs,就像判 ...

  9. 力扣—— 79/212. 单词搜索

    目录 79 单词搜索 212 单词搜索II 79 单词搜索 class Solution(object):#深度搜索def exist(self, board, word):self.flag=0se ...

最新文章

  1. chart 模板 - 每天5分钟玩转 Docker 容器技术(165)
  2. 【第六期】拿不到offer全额退款 !人工智能工程师培养计划招生
  3. 遇到npm install的错误,多比较比较npm的版本
  4. ResourceManager里面Trackingui需要手动该ip
  5. WriteFreely:创建博客,建立社区
  6. 数据流中的中位数java_数据流中的中位数
  7. python爬取图文新闻_python爬取新闻需要什么软件
  8. LintCode: Two Sum
  9. C++教程:C++开发的四重境界是什么?
  10. Winform 分页用户自定义控件( ML.Pager.WinControl)
  11. web一键返回顶端html代码,CSS-返回顶部代码_html/css_WEB-ITnose
  12. Linux(六)NFS(network file system)服务器实验
  13. msm8916的OTG接鼠标可以使用,但是接U盘无法识别。
  14. Jboss RichFaces + Skin的简单运用示例代码
  15. python 发送匿名邮件或无发件人
  16. [935]python解析xml文件
  17. 转载:徐家骏:我在华为工作十年的感悟
  18. 正压控制单元KA5000F/风机节能仪KA5000F
  19. 在UE4中完美导入MMD的动作,表情;基本导入镜头,材质---最详细教程
  20. 有什么数据恢复软件好?

热门文章

  1. R 数据可视化 : 热图
  2. 综述 | 森林微生物组:多样性,复杂性和动态变化(IF:11.3)
  3. 基础001.Markdown编写云笔记
  4. 16s扩增子分析注意事项和经验总结Tips
  5. R语言使用gt包和gtExtras包优雅地、漂亮地显示表格数据:使用gt包可视化表格数据,使其易于阅读和理解、使用gtExtras包添加一个图,显示表中某一列中的数字
  6. R语言计算平均值的标准误差(standard error of the mean):自定义函数计算平均值的标准误差、使用plotrix包的std.error函数计算平均值的标准误差
  7. pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例
  8. java 启动加载顺序_Java 程序的加载运行过程 | 学步园
  9. 新版IntelliJ IDEA Web项目配置完整流程
  10. 面向单细胞RNA-seq数据插补及聚类方法研究