79.単語検索

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

単語はアルファベット順に並べ、隣接するセルの文字で形成する必要があります。「隣接する」セルとは、水平方向または垂直方向に隣接するセルのことです。同じセル内の文字は再利用できません。

 

例:

ボード= 
[ 
  ['A'、 'B'、 'C​​'、 'E']、
  ['S'、 'F'、 'C​​'、 'S']、
  ['A'、 'D'、 'E '、' E '] 
] 

与えられた単語= " ABCCED "、trueを返す
与えられた単語= " SEE "、trueを返す
与えられた単語= " ABCB "、falseを返す

 

促す:

  • boardまたword、大文字と小文字のみが含まれています。
  • 1 <= board.length <= 200
  • 1 <= board[i].length <= 200
  • 1 <= word.length <= 10^3

DFS +バックトラッキング

2次元のテーブルを見ると、DFSと考えられます。DFSは2次元のテーブル全体をトラバースします。DFSは、現在の位置が単語の先頭の文字であるときに実行されます。同時に、vis配列が追加され、訪問された位置が示されます。その後、いくつかの判断条件が追加されます。

コード

	def exist(self, board: List[List[str]], word: str) -> bool:
		def dfs(x, y, tmp):
			nonlocal flag
			if tmp == word:
				flag = True
				return
			if not (0 <= x < rowLength and 0 <= y < colLength):
				return
			if flag or vis[x][y] or board[x][y] != word[len(tmp)]:
				return
			vis[x][y] = True
			dfs(x + 1, y, tmp + board[x][y])
			dfs(x - 1, y, tmp + board[x][y])
			dfs(x, y + 1, tmp + board[x][y])
			dfs(x, y - 1, tmp + board[x][y])
			vis[x][y] = False

		rowLength, colLength, flag = len(board), len(board[0]), False
		vis = [[False for _ in range(colLength)] for _ in range(rowLength)]
		for i in range(rowLength):
			for j in range(colLength):
				if board[i][j] == word[0]:
					dfs(i, j, '')
				if flag:
					return flag
		return flag

おすすめ

転載: blog.csdn.net/weixin_43336281/article/details/108559487