leetcode 127. Word Ladder

题目链接:leetcode

思路:
回溯法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from collections import deque
class Solution:

def getNeighbors(self,word):
neighbors = []
letters = 'abcdefghijklmnopqrstuvwxyz'
for i in range(len(word)):
for letter in letters:
newWord = word[:i]+letter+word[i+1:]
if newWord not in self.visitedSet and newWord in self.wordSet:
if newWord == self.endWord:
return [newWord]
self.visitedSet.add(newWord)
neighbors.append(newWord)
return neighbors

def ladderLength(self, beginWord, endWord, wordList):
"""
:type beginWord: str
:type endWord: str
:type wordList: List[str]
:rtype: int
"""
if endWord not in wordList:return 0
level = 1
self.endWord = endWord
self.visitedSet = set()
self.wordSet = set(wordList)
q = deque()
q.append(beginWord)
q.append('Level')
while len(q) != 0:
word = q.popleft()
if word == 'Level':
level += 1
if len(q) > 0:
q.append('Level')
continue
neighbors = self.getNeighbors(word)
if neighbors:
print("level={},word={},neighbors={}".format(level,word,neighbors))
for neighbor in neighbors:
if neighbor == self.endWord:
return level+1
q.append(neighbor)
return 0