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

相关推荐
励志不掉头发的内向程序员2 小时前
【从零写一个CAD 03】三个 double 值得单独一个类吗:把视图变换抽成 View
开发语言·c++·qt·学习·系统架构
Doubbbbbbble云2 小时前
基于贪心算法的区间覆盖问题求解策略4
算法·贪心算法
m4Rk_8 小时前
【论文阅读】Agent 记忆机制(83):Inside Out——用可演化 PersonaTree 构建 Agent 的核心长期记忆
论文阅读·人工智能·学习·开源·github
不会就选b9 小时前
算法日常・每日刷题--<贪心>25
数据结构·算法
鬓戈9 小时前
Rust 语言与 AI 应用生态调研及学习路径
人工智能·学习·rust
传奇开心果编程10 小时前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
xian_wwq10 小时前
【学习笔记】等保合规安全基线核查实战
笔记·学习
传奇开心果编程10 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
yangmu320311 小时前
发动机是怎么把油变成动力的:四冲程内燃机原理拆解
学习
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(81):EMR——用情景记忆避免 Agent 在多步推理中反复绕圈
论文阅读·人工智能·学习·开源·github