当前位置: 首页 > ds >正文

79. 单词搜索

题目

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

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

示例 1:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

示例 2:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true

示例 3:

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false

提示:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board 和 word 仅由大小写英文字母组成

思路

先初始化一个v数组,里面记录当前i,j位置的字符是否被访问过,初始都是0,然后深度优先遍历board ,k是word的下标,当k== word.size(),说明找到了word单词,返回true,如果i,j越界,或该位置的字符已经被访问,或者当前位置字母匹配失败,返回false 。能运行到这里,说明i、j没有越界,且没有被访问,并且当前位置字母匹配成功;此时记录visited[i][j] =1,dfs递归i、j位置的上下左右,有一个位置是true,就说明找到了,返回true。递归结束,标记visited[i][j] =0,恢复现场,这个位置可以继续被利用。

代码

class Solution {
public:bool dfs(vector<vector<char>>& board,int i,int j,vector<vector<int>> &v,string &word,int k){if(k==word.size())//每个字母都找到了{return true;}//检查是否出现越界if(i<0||j<0||i>=board.size()||j>=board[0].size()||v[i][j]||board[i][j]!=word[k]){return false;}v[i][j]=1;//把当前位置标记为已访问//看当前位置的上下左右位置是否能匹配上下一个字符bool ans=dfs(board,i+1,j,v,word,k+1)||dfs(board,i-1,j,v,word,k+1)||dfs(board,i,j+1,v,word,k+1)||dfs(board,i,j-1,v,word,k+1);v[i][j]=0;//把当前节点标记为未访问,如果搜索失败当前位置还能继续被利用return ans;}bool exist(vector<vector<char>>& board, string word){int m=board.size(),n=board[0].size();vector<vector<int>> v(m,vector<int>(n,0));//记录i,j位置的字符是否被访问过for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(dfs(board,i,j,v,word,0)){return true;}}}return false;}
};

http://www.xdnf.cn/news/1975.html

相关文章:

  • 深入理解Java的 JIT(即时编译器)
  • 从桥梁坍塌到地质隐患:超导磁测量技术的“防患未然”价值
  • pyinstaller打包paddleocr发生错误解决
  • C++中随机数的产生
  • 【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析
  • Java使用IText7动态生成带审批文本框的PDF文档
  • 【服务器操作指南】从 Hugging Face 上下载文件 | 从某一个网址上下载文件到 Linux 服务器的指定目录
  • 用Obsidian四个插件打造小说故事关联管理系统:从模板到图谱的全流程实践
  • 692. 前K个高频单词(map的练习)
  • 【初识Trae】字节跳动推出的下一代AI原生IDE,重新定义智能编程
  • 11.ArkUI Tabs的介绍和使用
  • 【多目标进化算法】 MOEA/D算法(知识点)
  • RAG5个常见错误
  • 硬件虚拟化(如KVM、VMware)
  • Redis相关
  • PHP:点击/拖动-上传图片文件目录,并存入数据库
  • 大肠杆菌诱导蛋白时OD600=0.6-0.8添加IPTG的思考-实验操作系列-009
  • 0. Selenium工具的安装
  • 【Linux网络】TCP服务中IOService应用与实现
  • 一个非常快速的 Latex 入门教程【Part 2】
  • 2025产品经理AI效率指南:3大案例实战流程图、原型图与PRD文档
  • AI 场景落地:API 接口服务 VS 本地部署,哪种更适合?
  • 不在同一个局域网的远程桌面连接怎么设置?本地内网计算机让其他网络远程访问6种常用方法
  • 计算机界的50位大牛(23)—— 詹姆斯·尼古拉·格雷:数据库事务的缔造者
  • 客户联络中心能力与客户匹配方式
  • [论文阅读]ReAct: Synergizing Reasoning and Acting in Language Models
  • 【25软考网工】第三章(4)生成树协议、广播风暴和MAC地址表震荡
  • springboot2.x升级到3.x 惨痛经验总结
  • 每日算法-250425
  • kafka和Spark-Streaming2