DFS搜索,使用prefix的字典加速;另外注意往result里放时要square.copy()一下
class Solution: def wordSquares(self, words: List[str]) -> List[List[str]]: wordsDict = {} for i in range(len(words)): word = words[i] for k in range(len(word)): if word[0:k+1] not in wordsDict: wordsDict[word[0:k+1]] = [] wordsDict[word[0:k+1]].append(word) result = [] # backtrace for i in range(len(words)): self.backtrace([words[i]], result, words, wordsDict) return result def backtrace(self, square, result, words, wordsDict): n = len(words[0]) i = len(square) - 1 # idx for newly add line for k in range(0, i): if square[i][k] != square[k][i]: # check fail, return return if i + 1 == n: # square is good result.append(square.copy()) return prefix = '' for k in range(0, i+1): prefix += square[k][i+1] if prefix not in wordsDict: return for word in wordsDict[prefix]: square.append(word) self.backtrace(square, result, words, wordsDict) square.pop()