LeetCode 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

解法

1.回溯法

解题思路

此题与LeetCode 200. 岛屿数量-CSDN博客问题有些类似,就是以每个点都作为起点深度优先遍历一遍,在遍历过程中要标记已读,并回溯,此问题只需要找到一个答案,于是找到答案立马返回。

cpp 复制代码
class Solution {
public:
    bool exist(vector<vector<char>>& board, string word) {
        const int DIRS[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
        int m = board.size(),n = board[0].size(),t = word.size();
        auto dfs = [&](this auto && dfs,int i,int j,int l){
            if(i < 0 || i >= m || j < 0 || j >= n || l > t || board[i][j] != word[l]) return false;
            if(l == t - 1) return true; //因为从0开始计数
            char temp = board[i][j];
            board[i][j] = '#';   //标记已读
            for(int x = 0;x < 4;x ++){
                if(dfs(i + DIRS[x][0],j + DIRS[x][1],l + 1)) return true;
            }
            board[i][j] = temp; //回溯
            return false;
        };
        
        for(int i = 0;i < m;i ++){
            for(int j = 0;j < n;j ++){
                if(dfs(i,j,0)) return true; //有一个起点满足条件,就要返回
            }
        }
        return false;
    }
};

时间复杂度O(M·N·4^L),空间复杂度O(L)(L为单词长度,也是递归深度,需要栈存储数据)

相关推荐
听取WA声一片(无恶意)5 分钟前
CSP-J/S 初赛图论完全讲义
算法·csp-s初赛·csp-j初赛
Brilliantwxx16 分钟前
【算法从零到千】【51-54】逆序对(分治+递归算法)
数据结构·算法·排序算法
小星星闪亮登场25 分钟前
2026河南萌新联赛第四场--南阳理工学院
数据结构·算法·贪心算法·动态规划·哈希算法·广度优先
土司大王27 分钟前
LeetCode hot100——两数之和
数据结构·算法·leetcode
luj_17681 小时前
大航海时代:沉浸式财商实战沙盒
c语言·开发语言·网络·经验分享·算法
Navigator_Z1 小时前
LeetCode //C - 1200. Minimum Absolute Difference
c语言·算法·leetcode
wabs6661 小时前
关于字符串【力扣344.反转字符串的思考】
数据结构·算法·leetcode
民乐团扒谱机2 小时前
【微实验】谐波乘积谱(HPS)算法深度解析:原理、数学与代码实现
开发语言·人工智能·python·算法·语音识别·音乐
Nil2082 小时前
leetcode 73矩阵置0
算法·leetcode·矩阵
luj_17684 小时前
财商游戏三大核心维度设计
c语言·开发语言·网络·经验分享·算法