首页 > 其他分享 >79. 单词搜索

79. 单词搜索

时间:2023-09-28 13:57:15浏览次数:39  
标签:index word int next 单词 搜索 board return 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

思路:

和岛屿的思路基本相同,只不过这里在进入递归之前进行剪枝,减少了栈的空间消耗


class Solution {
public:
    bool dfs(vector<vector<char>>& board,int i,int j,string word,int start){
        if( board[i][j] != word[start])   return false;
        if(start == word.size() - 1)    return true;
        char c =board[i][j];
        board[i][j] = '.';
        for(int index = 0; index < 4; ++index){
            int next_i = i + di[index];
            int next_j = j + dj[index];
            if(next_i < 0 || next_j < 0 || next_i >= board.size() || next_j >= board[0].size()) continue;
            if(dfs(board, next_i,next_j,word,start+1)) return true;
        }
        board[i][j] = c;
        return false;
    }
    bool exist(vector<vector<char>>& board, string word) {
        int count = 0;
        //遍历board 如果符合 则进入dfs的下一层
        for(int i = 0;i < board.size();i++){
            for(int j = 0; j < board[i].size();j++){
                    if(dfs(board,i,j,word,0)){
                        return true;
                    }
            }
        }
        return false;
    }
private:
    int di[4] = {-1,0,1,0};
    int dj[4] = {0,1,0,-1};
};

标签:index,word,int,next,单词,搜索,board,return,79
From: https://www.cnblogs.com/lihaoxiang/p/17735565.html

相关文章

  • [leetcode] 30. 串联所有单词的子串
    题目30.串联所有单词的子串给定一个字符串s和一个字符串数组words。words中所有字符串长度相同。s中的串联子串是指一个包含words中所有字符串以任意顺序排列连接起来的子串。例如,如果words=["ab","cd","ef"],那么"abcdef","abefcd","cdabef","cdefab",&quo......
  • 随想录Day8|344. 反转字符串、541. 反转字符串Ⅱ、LCR 122. 路径加密、151. 反转字符
    随想录Day8|344.反转字符串、541.反转字符串Ⅱ、LCR122.路径加密、151.反转字符串里的单词、LCR182.动态口令 题目越来越长了…… 344.反转字符串文章&视频讲解编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数......
  • 单片机升级,推荐此79元双核[email protected]国产平台的8个理由
    含税79元即可运行Linux操作系统对于嵌入式软件开发者而言,单片机令人最痛苦的莫过于文件操作。79元T113-i工业核心板(基于全志国产处理器,国产化率100%)可运行Linux操作系统,可使用Linux命令对文件进行一键操作,既方便又快捷。不仅如此,Linux操作系统还具备如下三大优点:(1)多用户多任务......
  • CH573 CH579 CH582 蓝牙断开连接原因分析
    下面列举几个常见的蓝牙断开连接原因:1.reason8:连接超时,根本原因:底层在设置的超时时间内,没有成功通信过,下面这几种情况可能发生:1.程序中有比较耗时的处理,导致主循环一直没有查询,2.32k晶振误差很大导致。2.reason13:对方远程主动断开连接。3.reason16:本地主动断开连接。4.reason......
  • 力扣-2798-满足目标工作时长的员工数目
    公司里共有n名员工,按从0到n-1编号。每个员工i已经在公司工作了hours[i]小时。公司要求每位员工工作至少target小时。给你一个下标从0开始、长度为n的非负整数数组hours和一个非负整数target。请你用整数表示并返回工作至少target小时的员工数。 示......
  • 19、(P578、P579)
    1、泛型编程是什么?泛型编程(GenericProgramming)是一种编程范式,旨在编写可重用和通用的代码,以适应多种数据类型而不是针对特定数据类型。泛型编程的主要思想是将算法和数据结构从特定数据类型中抽象出来,使它们可以应用于各种数据类型,同时保持代码的高度可复用性和灵活性。2、什么......
  • CF1079 Codeforces Round 522 (Div. 2, based on Technocup 2019 Elimination Round 3
    CF1079AKitchenUtensils令\(c_i\)表示餐具\(i\)出现的数量,最小的餐具套数为\(t=\lceil\frac{\max\{c_i\}}{k}\rceil\),按照这个计算就好了。#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=105;intn,k;inta[N]......
  • pro table 中搜索select联动另一个select的问题
     问题一、一个select能联动另一个select//部门project列表,从服务端获取const[deptProjListFromServer,setDeptProjListFromServer]=useState<{[key:string]:any}>([]);//当前projectconst[currDepartmentId,setDepartmentId]=useState('1');/......
  • vue3项目封装支持搜索,选中不可选,选中的数据项支持上下移动,删除的上下穿梭的树状穿梭框
     1,vue3代码1//这个是返回的所有的数据2constsourceItems=ref([])3//这是穿梭到下面的数据4consttargetItems=ref([])5//这是搜索字段6constsearchName=ref('')7//这两个要是后端返回,可不写8constex......
  • 代码随想录day21 | ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 2
    530.二叉搜索树的最小绝对差classSolution{private:intresult=INT_MAX;TreeNode*pre=NULL;voidtraversal(TreeNode*cur){if(cur==NULL)return;traversal(cur->left);//左if(pre!=NULL){//中......