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

相关推荐
憧憬成为web高手2 小时前
[HITCON 2017]SSRFme
学习
妖精的羽翼2 小时前
AI + 前端、可视化 & 大屏
学习
8Qi86 小时前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
xuhaoyu_cpp_java8 小时前
项目学习(三)分页查询
java·经验分享·笔记·学习
小宋加油啊10 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly10 小时前
前沿算法深度解析(一)
算法
小欣加油11 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展
Xzh042311 小时前
AI Agent 学习路线(Java 后端方向)
java·人工智能·学习
做cv的小昊11 小时前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论