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

79. 单词搜索

时间:2024-06-30 19:31:31浏览次数:3  
标签:word int 字母 dfs 单词 搜索 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

示例 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 仅由大小写英文字母组成

进阶:你可以使用搜索剪枝的技术来优化解决方案,使其在 board 更大的情况下可以更快解决问题?

深度优先搜索

class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        int rows = board.size();
        int cols = board[0].size();
        for(int i = 0;i<rows;i++){
            for(int j = 0;j<cols;j++){
                if(dfs(board,word,i,j,0)) return true;
            }
        }
        return false;
    }
private:
    bool dfs(vector<vector<char>>& board, string word,int i,int j,int k){
        //终止条件
        // 1、首先,行列索引不能小于0,且行列索引不能超过棋盘的索引,回溯
        // 2、其次,当前该单词的第k个字母与棋盘当前的字母不对应,回溯
        if(i<0 || j<0 || i>board.size()-1 || j>board[0].size()-1) return false;
        if(board[i][j]!=word[k]) return false;
        if(k == word.size()-1) return true;//遍历到所有的字母,结束
        //此时,经过排除,棋盘上遍历到的字母与当前第k个字母相等,那么清除棋盘当前路径上该位置的字符,并继续深度搜索
        int tem = board[i][j];//保存断点
        board[i][j] = ' ';
        bool ret = dfs(board,word,i-1,j,k+1)||dfs(board,word,i+1,j,k+1)||dfs(board,word,i,j-1,k+1)||dfs(board,word,i,j+1,k+1);
        board[i][j] = tem;//恢复中断
        return ret;
    }
    
};

标签:word,int,字母,dfs,单词,搜索,board,return,79
From: https://blog.csdn.net/weixin_44720592/article/details/139931559

相关文章

  • 力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP
    Problem:2741.特别的排列......
  • 力扣每日一题 6/30 记忆化搜索/动态规划
    博客主页:誓则盟约系列专栏:IT竞赛专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • CF1979E Manhattan Triangle
    题目描述给定\(n\)个点,找出三个点使得这三个点两两之间的曼哈顿距离为偶数\(d\)\[n\le300000\]题解与一个点的曼哈顿距离为\(d\)的点是一个斜\(45°\)的正方形设这个点坐标为\((x,y)\)考虑另外两个点可能在哪些位置,如果另外两个点在正方形的同一条边上,那么这两个点的横纵......
  • 第 7 章图像搜索
    本章将展示如何利用文本挖掘技术对基于图像视觉内容进行图像搜索。本章阐明了提出利用视觉单词的基本思想,并解释了完整的安装细节,还在一个示例数据集上进行了测试。7.1基于内容的图像检索在大型图像数据库上,CBIR(Content-BasedImageRetrieval,基于内容的图像检索)技术用于检......
  • 基于布谷鸟搜索的多目标优化matlab仿真
    1.程序功能描述       基于布谷鸟搜索的多目标优化,设置三个目标函数,进行多目标优化,输出三维优化曲面以及收敛曲线。 2.测试软件版本以及运行结果展示MATLAB2022a版本运行      3.核心程序  X0=func_obj(X0);%基于非支配排序对它们进......
  • 「动态规划」如何解决单词拆分问题?
    139.单词拆分https://leetcode.cn/problems/word-break/description/给你一个字符串s和一个字符串列表wordDict作为字典。如果可以利用字典中出现的一个或多个单词拼接出s则返回true。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。输入:s="leetcode......
  • 基于 Python-Tkinter 的古诗文垂直搜索引擎(全网首份 + 包复现)
    目录一、前言二、实现效果参考文献注:①整个项目可作为本科阶段计算机NLP方向的课程设计,建议收藏。一、前言  中国古典诗词具有独特的艺术表现形式,在人们的日常生活中架起了情感共鸣的桥梁、充当了教育和启蒙的工具,其中很多古诗词蕴含着民族正气和家国情......
  • 【C++高阶】高效搜索的秘密:深入解析搜索二叉树
    ......
  • 阿里巴巴关键字搜索商品API返回值探索:数据驱动的电商产品创新策略
    阿里巴巴关键字搜索商品API返回值探索与数据驱动的电商产品创新策略密切相关。以下是对API返回值结构的解析以及如何利用这些数据驱动电商产品创新策略的详细阐述:一、阿里巴巴关键字搜索商品API返回值探索阿里巴巴关键字搜索商品API的返回值结构通常是一个JSON格式的数据包,包......
  • Windows Api如何创建一个快捷方式并且在开始菜单搜索到自己的应用
     原文链接:http://cshelloworld.com/home/detail/1804473083243925504当我们点击win10系统搜索框的时候,输入名称,win10会帮助我们匹配到对应的应用。这里搜索框实际上就是windows系统的开始菜单。接下来我们随便找一个应用,右键,然后点击打开文件位置,我们来看下这个EveryThing的......