【每天学习一点算法 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)

相关推荐
yszaygr21384 分钟前
Verilog参数化游程编码RLE模块
算法
望易16 分钟前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络4 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
HjhIron20 小时前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩21 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹1 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术1 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
浮生望1 天前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰1 天前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法
地平线开发者2 天前
J6B vio scenario sample
算法