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为单词长度,也是递归深度,需要栈存储数据)

相关推荐
嘴贱欠吻!9 分钟前
Flutter鸿蒙开发指南(七):轮播图搜索框和导航栏
算法·flutter·图搜索算法
张祥64228890432 分钟前
误差理论与测量平差基础笔记十
笔记·算法·机器学习
qq_192779871 小时前
C++模块化编程指南
开发语言·c++·算法
cici158743 小时前
大规模MIMO系统中Alamouti预编码的QPSK复用性能MATLAB仿真
算法·matlab·预编码算法
历程里程碑3 小时前
滑动窗口---- 无重复字符的最长子串
java·数据结构·c++·python·算法·leetcode·django
2501_940315264 小时前
航电oj:首字母变大写
开发语言·c++·算法
CodeByV4 小时前
【算法题】多源BFS
算法
TracyCoder1234 小时前
LeetCode Hot100(18/100)——160. 相交链表
算法·leetcode
浒畔居4 小时前
泛型编程与STL设计思想
开发语言·c++·算法
独处东汉5 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法