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

面试热题(单词搜索)

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

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

       这种是不是和岛屿搜索的类型题是相似的,每个点都有8个位置的选择,这种类型题就可以用我们上次讲的岛屿数量的解法,通过深度优先遍历(dfs)进行解决

   //设置方向  上右下左int[] xnum={-1,0,1,0};int[] ynum={0,1,0,-1};

我们可以维护一个visited数组,防止走回头路

 boolean[][] visited;

       递归函数中入参的变量我们看需要哪些?原数组肯定是需要的,然后我们也需要知道我们已经遍历到哪个点了,因为我们要找的是字符串,我们也要知道当前遍历到字符串的哪个索引上,函数签名如下:

  private boolean dfs(char[][] board, String word, int startIndex, int x, int y) {}

       如果当前遍历到字符串索引的最后一位且网格中也有相同的字符,那就说明该路径我们在网格中是可以找到的,如果找不到,直接返回false,如果当前不是字符串的最后一个索引对应的位置,在从当前元素的相邻元素不断的去进行寻找,直到找到返回true或者fasle为止

源码如下:

    //设置方向  上右下左int[] xnum={-1,0,1,0};int[] ynum={0,1,0,-1};boolean[][] visited;int row;int column;public boolean exist(char[][] board, String word) {//对入参进行判断if(board==null||board.length==0||board[0].length==0){return false;}//从每一个点都开始进行遍历row=board.length;column=board[0].length;visited=new boolean[row][column];for (int i = 0; i <row; i++) {for (int j = 0; j <column; j++) {//如果存在一种情况则返回trueif(dfs(board,word,0,i,j)){return true;}}}return false;}private boolean dfs(char[][] board, String word, int startIndex, int x, int y) {if(startIndex==word.length()-1){if(word.charAt(startIndex)==board[x][y]){return true;}}if(word.charAt(startIndex)!=board[x][y]){return false;}else{//向四个方向进行寻找visited[x][y]=true;for (int i = 0; i <4; i++) {int newx=x+xnum[i];int newy=y+ynum[i];//如果越界的话则不需要进行考虑if(newx<0||newx>=row||newy<0||newy>=column||visited[newx][newy]){continue;}if(dfs(board,word,startIndex+1,newx,newy)){return true;}        }//回溯visited[x][y]=false;}return false;}

http://www.lryc.cn/news/127924.html

相关文章:

  • 自定义表格组件:实现表格中有固定列的功能逻辑
  • uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案
  • Django操作cookie、Django操作session、Django中的Session配置、CBV添加装饰器、中间件、csrf跨站请求
  • 内网穿透——使用Windows自带的网站程序建立网站
  • JavaScript请求数据的4种方法总结(Ajax、fetch、jQuery、axios)
  • js中的break和continue中的区别
  • Cat(2):下载与安装
  • 程序崩溃生成dump文件定位到崩溃处
  • 安卓获取当前的IP地址
  • Pyqt5-自动化电池监测工具
  • Struts2一次请求参数问题的记录
  • ctfshow-web9
  • 网络安全(黑客)自学路线/笔记
  • Vim基本使用
  • 二 根据用户行为数据创建ALS模型并召回商品
  • SpringBoot ⽇志⽂件
  • SpringBoot案例-部门管理-查询
  • Java中处理表格
  • 指静脉开集测试(OpenSet-test)代码(包含7个数据集)
  • okcc对接ASR平台,okcc客户投诉的安全问题
  • JVM中判定对象是否回收的的方法
  • macos 使用vscode 开发python 爬虫(开发二)
  • (已解决)redis.get报错com.alibaba.fastjson.JSONException: autoType is not support
  • 控价可以这样做
  • Spring学习笔记之Spring IoC注解式开发
  • C语言入门教程,C语言学习教程(非常详细)第二章 c语言初探
  • HOT99-下一个排列
  • JAVA基础知识(二)——程序流程控制
  • mysql知识点+面试总结
  • 前端大屏常用的适配方案