首页 > 试题广场 >

单词搜索

[编程题]单词搜索
  • 热度指数:3324 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给出一个二维字符数组和一个单词,判断单词是否在数组中出现,
单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。

数据范围:
0 < 行长度 <= 100
0 < 列长度 <= 100
0 < 单词长度 <= 1000

例如:
给出的数组为["XYZE","SFZS","XDEE"]时,
对应的二维字符数组为

若单词为"XYZZED"时,应该返回 true,
也即:

若单词为"SEE"时,应该返回 true,
也即:

若单词为"XYZY"时,应该返回 false。
示例1

输入

["XYZE","SFZS","XDEE"],"XYZZED"

输出

true
示例2

输入

["XYZE","SFZS","XDEE"],"SEE"

输出

true
示例3

输入

["XYZE","SFZS","XDEE"],"XYZY"

输出

false
package main
import _"fmt"
import "strings"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param board string字符串一维数组 
 * @param word string字符串 
 * @return bool布尔型
*/
func exist( board []string ,  word string ) bool {
    m,n:=len(board),len(board[0])
    mat:=[][]string{}
    for _,s:=range board{
        mat=append(mat,strings.Split(s,""))
    }
    var flag bool
    var dfs func(int,int,string)
    dfs=func(i,j int,word string){
        if flag||i<0||i>=m||j<0||j>=n||mat[i][j]==""||mat[i][j]!=string(word[0]){
            return
        }
        tmp:=mat[i][j]
        mat[i][j]=""
        word=word[1:]
        if len(word)==0{
            flag=true
            return
        }
        dfs(i+1,j,word)
        dfs(i-1,j,word)
        dfs(i,j+1,word)
        dfs(i,j-1,word)
        mat[i][j]=tmp
    }
    for i:=0;i<m;i++{
        for j:=0;j<n;j++{
            if mat[i][j]==string(word[0]){
                dfs(i,j,word)
                if flag{
                    return true
                }
            }
        }
    }
    return false
}

发表于 2023-03-09 23:07:39 回复(0)

问题信息

上传者:牛客301499号
难度:
1条回答 1994浏览

热门推荐

通过挑战的用户

查看代码