Leetcode 127. Word Ladder

思路:

 1 class Solution(object):
 2     def __init__(self):
 3         return
 4 
 5     def ladderLength(self, beginWord, endWord, wordList):
 6         """
 7         :type beginWord: str
 8         :type endWord: str
 9         :type wordList: List[str]
10         :rtype: int
11         """
12         from collections import defaultdict, deque
13         queue = deque([[beginWord, 1]])
14         visited = set([beginWord])
15         neighbors = defaultdict(list)
16         for word in wordList:
17             for x in range(len(word)):
18                 token = word[:x] + '_' + word[x + 1:]
19                 neighbors[token] += word,
20         while queue:
21             word, length = queue.popleft()
22             if self.wordDist(word, endWord) <= 1:
23                 return length + 1
24             for x in range(len(word)):
25                 token = word[:x] + '_' + word[x + 1:]
26                 for ladder in neighbors[token]:
27                     if ladder not in visited:
28                         visited.add(ladder)
29                         queue += [ladder, length + 1],
30         return 0
31 
32     def wordDist(self, wordA, wordB):
33         return sum([wordA[x] != wordB[x] for x in range(len(wordA))])
34 
35 SL = Solution()
36 print(SL.ladderLength('hit', 'cog', ['hot', 'dot', 'dog', 'lot', 'log']))

 

posted @ 2017-02-20 06:39  lettuan  阅读(154)  评论(0编辑  收藏  举报