【每天学习一点算法 2026/03/20】单词搜索

每天学习一点算法 2026/03/20

题目:单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中"相邻"单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

这道题有点像之前的岛屿数量,我们需要遍历网格中所有字符,找到符合单词开头的字母,然后寻找它上下左右的字符是否匹配单词的下一个字符,直到找到所有的字符或者碰到边界,如果遍历完网格中的所有字符还没找到就返回 false

typescript 复制代码
function exist(board: string[][], word: string): boolean {
  let res = false
  function helper (row: number, col: number, index: number) {
    if (board[row][col] === '#') return // 遇到已经使用过的选择无效
    // 遇到符合的字符
    if (board[row][col] === word[index]) {
     	// 如果已经匹配完成修改结果标识并返回
      if (index === word.length - 1) {
        res = true
        return
      }
      const temp = board[row][col] // 记录当前位置字符
      board[row][col] = '#' // 标记已经使用过的字符
      // 上
      if (row - 1 >= 0) {
        helper(row - 1, col, index + 1)
      }
      // 下
      if (row + 1 < board.length) {
        helper(row + 1, col, index + 1)
      }
      // 左
      if (col - 1 >= 0) {
        helper(row, col - 1, index + 1)
      }
      // 右
      if (col + 1 < board[0].length) {
        helper(row, col + 1, index + 1)
      }
      board[row][col] = temp // 周围没有匹配的下一个字符,此次选择无效,恢复此位置字符
    }
    return
  }
  
  // 循环遍历网格,传入初始字符
  for (let i = 0; i < board.length; i++) {
    for (let j = 0; j < board[0].length; j++) {
      helper(i, j, 0)
    }
  }
  return res
};

题目来源:力扣(LeetCode)

相关推荐
七颗糖很甜13 小时前
台风数据免费获取教程
大数据·python·算法
AI科技星13 小时前
《全域数学》第一部·数术本源
算法·机器学习·数学建模·数据挖掘·量子计算
念恒1230614 小时前
Python(简单判断) —— 从 if 开始
python·学习
阿Y加油吧14 小时前
二刷 LeetCode:118. 杨辉三角 & 198. 打家劫舍 复盘笔记
笔记·算法·leetcode
峥嵘life14 小时前
Android 不同的蓝牙音箱连接后声音突变问题分析解决
android·学习
深邃-14 小时前
【数据结构与算法】-二叉树(1):树的概念与结构,二叉树的概念与结构
数据结构·算法·链表·二叉树··顺序表
Willliam_william14 小时前
QEMU学习之路(12)— 使用qemu-system-riscv64测试IOMMU
大数据·学习·elasticsearch
2zcode14 小时前
基于Chaboche物理约束与LSTM残差学习的316L不锈钢循环塑性灰箱本构建模研究
学习·机器学习·lstm
风筝在晴天搁浅14 小时前
手撕归并排序
数据结构·算法·排序算法
my_daling14 小时前
DSMC通信协议理解,以及如何在FPGA上实现DSMC从设备(2)
学习·fpga开发