2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母相关的知识,希望对你有一定的参考价值。

2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。力扣79。

福大大 答案2021-10-02:

自然智慧即可。
递归。对于board[i][j],上下左右走。1.制造现场;2.递归;3.恢复现场。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    board := [][]byte{{'A', 'B', 'C', 'E'}, {'S', 'F', 'C', 'S'}, {'A', 'D', 'E', 'E'}}
    word := "ABCCED"
    ret := exist(board, word)
    fmt.Println(ret)
}

func exist(board [][]byte, word string) bool {
    w := []byte(word)
    for i := 0; i < len(board); i++ {
        for j := 0; j < len(board[0]); j++ {
            if f(board, i, j, w, 0) {
                return true
            }
        }
    }
    return false
}

// 目前到达了b[i][j],word[k....]
// 从b[i][j]出发,能不能搞定word[k....] true false
func f(b [][]byte, i int, j int, w []byte, k int) bool {
    if k == len(w) {
        return true
    }
    // word[k.....] 有字符
    // 如果(i,j)越界,返回false
    if i < 0 || i == len(b) || j < 0 || j == len(b[0]) {
        return false
    }
    if b[i][j] != w[k] {
        return false
    }
    tmp := b[i][j]
    b[i][j] = 0
    ans := f(b, i-1, j, w, k+1) || f(b, i+1, j, w, k+1) || f(b, i, j-1, w, k+1) || f(b, i, j+1, w, k+1)
    b[i][j] = tmp
    return ans
}

执行结果如下:


左神java代码

以上是关于2021-10-02:单词搜索。给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母的主要内容,如果未能解决你的问题,请参考以下文章

在字符串中提取围绕给定搜索字符串的 X 个单词

华为机试真题 C++ 实现单词搜索找到它

[LeetCode in Python] 79 (M) word search 单词搜索

给定一个字符串数组,返回所有的字谜字符串组

2022-01-23:力扣425,单词方块。 给定一个单词集合 (没有重复),找出其中所有的 单词方块 。 一个单词序列形成了一个有效的单词方块的意思是指从第 k 行和第 k 列 (0 ≤ k < m

单词搜索