LeetCode 算法:单词搜索 c++

原题链接🔗单词搜索
难度:中等⭐️⭐️

题目

给定一个 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 仅由大小写英文字母组成

题解

  1. 解题思路

LeetCode上的“单词搜索”问题是一个典型的回溯算法问题。这个问题的基本思路是在一个二维字符数组中搜索一个给定的单词,单词可以按任意方向(水平、垂直、对角线)进行搜索。以下是解题的基本步骤和思路:

  • 问题描述

    • 给定一个二维字符数组 board 和一个单词 word,找出 word 是否存在于 board 中。单词必须按字母顺序通过相邻的单元格(水平、垂直或对角线)拼写,并且只能使用每个单元格一次。
  • 解题思路

    • 定义搜索函数:定义一个递归函数 search,该函数接收当前位置 (i, j) 和当前单词的索引 k。
    • 检查当前字符:如果当前位置的字符与单词的当前字符不匹配,则返回 false。
    • 检查边界:如果 i 或 j 超出数组边界,或者当前字符不匹配,则返回 false。
    • 标记访问:将当前位置的字符暂时替换为一个特殊字符(如 ‘#’),以防止重复访问。
    • 递归搜索:在当前位置的四个方向(上、下、左、右)递归调用 search 函数。
    • 回溯:无论搜索是否成功,都需要将当前位置的字符恢复为原始字符,以便其他路径可以访问。
    • 返回结果:如果搜索到单词的最后一个字符,返回 true。
  1. c++ demo:
#include <vector>
#include <string>
#include <iostream>

using namespace std;
class Solution {
public:
    bool exist(vector<vector<char>>& board, const string& word) {
        int m = board.size();
        int n = board[0].size();

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (board[i][j] == word[0] && dfs(board, word, i, j, 0)) {
                    return true;
                }
            }
        }
        return false;
    }

private:
    bool dfs(vector<vector<char>>& board, const string& word, int x, int y, int k) {
        if (k == word.size()) return true; // 单词搜索完成
        if (x < 0 || y < 0 || x >= board.size() || y >= board[0].size() || board[x][y] != word[k]) return false; // 越界或字符不匹配

        char temp = board[x][y]; // 标记访问
        board[x][y] = '#';

        // 搜索四个方向
        if (dfs(board, word, x + 1, y, k + 1) || dfs(board, word, x - 1, y, k + 1) ||
            dfs(board, word, x, y + 1, k + 1) || dfs(board, word, x, y - 1, k + 1)) {
            return true;
        }

        board[x][y] = temp; // 回溯
        return false;
    }
};

int main() {
    Solution solution;
    vector<vector<char>> board = {
        {'A', 'B', 'C', 'E'},
        {'S', 'F', 'C', 'S'},
        {'A', 'D', 'E', 'E'}
    };
    string word = "ABC";

    if (solution.exist(board, word)) {
        std::cout << "Word found in the board." << std::endl;
    }
    else {
        std::cout << "Word not found in the board." << std::endl;
    }

    return 0;
}
  • 输出结果:

Word found in the board.

  1. 代码仓库地址: exist

相关推荐

  1. leetCode79. 单词搜索

    2024-07-19 13:02:02       27 阅读
  2. Leetcode. 212 单词搜索II

    2024-07-19 13:02:02       55 阅读
  3. LeetCode 212.单词搜索II

    2024-07-19 13:02:02       28 阅读
  4. C++力扣Leetcode算法5--搜索

    2024-07-19 13:02:02       31 阅读
  5. 算法题】79. 单词搜索

    2024-07-19 13:02:02       40 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 13:02:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 13:02:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 13:02:02       58 阅读
  4. Python语言-面向对象

    2024-07-19 13:02:02       69 阅读

热门阅读

  1. React一基础

    2024-07-19 13:02:02       20 阅读
  2. Spark SQL----CLUSTER BY子句

    2024-07-19 13:02:02       17 阅读
  3. Solana的账户模型

    2024-07-19 13:02:02       22 阅读
  4. 自然语言处理技术的发展过程

    2024-07-19 13:02:02       21 阅读
  5. pandas排名函数rank()的参数

    2024-07-19 13:02:02       18 阅读
  6. 智能结合:信息推送与供需发布机器人

    2024-07-19 13:02:02       21 阅读
  7. 2、SystemC基础语法

    2024-07-19 13:02:02       20 阅读
  8. 基于深度学习的水果识别系统

    2024-07-19 13:02:02       19 阅读
  9. C语言 条件编译

    2024-07-19 13:02:02       18 阅读
  10. 利用 PHP 解锁 1688 详情 API 接口的秘密

    2024-07-19 13:02:02       21 阅读
  11. Odoo创建一个自定义UI视图

    2024-07-19 13:02:02       23 阅读
  12. 代码随想录算法训练营第16天|二叉树part 04

    2024-07-19 13:02:02       23 阅读