首页 > 试题广场 >

单词搜索

[编程题]单词搜索
  • 热度指数:3318 时间限制: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
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param board string字符串一维数组 
# @param word string字符串 
# @return bool布尔型
#
class Solution:
    def exist(self , board: List[str], word: str) -> bool:
        # write code here
        visited = [[False for i in range(len(board[0]))] for j in range(len(board))]

        for i in range(len(board)):
            for j in range(len(board[0])):
                if board[i][j] == word[0]:
                    found  = self.traverse(board, visited, i,j, word, 0)

                    if found:
                        return True
        return False


    def traverse(self, board, visited, x, y, word, now_count):
        if board[x][y] == word[now_count]:
            now_count += 1
        else:
            return False

        if now_count == len(word):
            return True

        visited[x][y] = True
        found = False
        if x - 1 >= 0:
            if not visited[x-1][y]:
                found |= self.traverse(board, visited, x-1, y, word, now_count)

        if x+1 < len(board):
            if not visited[x+1][y]:
                found |= self.traverse(board, visited, x+1, y, word, now_count)

        if y - 1 >= 0:
            if not visited[x][y-1]:
                found |= self.traverse(board, visited, x, y-1, word, now_count)

        if y+1 < len(board[0]):
            if not visited[x][y+1]:
                found |= self.traverse(board, visited, x, y+1, word, now_count)
        visited[x][y] = False

        return found
        

发表于 2024-04-27 22:21:32 回复(0)

问题信息

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

热门推荐

通过挑战的用户

查看代码