-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathwordLadder
More file actions
35 lines (28 loc) · 1 KB
/
wordLadder
File metadata and controls
35 lines (28 loc) · 1 KB
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
from collections import defaultdict, deque
def findLadders(beginWord, endWord, wordList):
wordSet = set(wordList)
if endWord not in wordSet:
return []
# Step 1: BFS to build graph of shortest paths
layer = {}
layer[beginWord] = [[beginWord]]
while layer:
new_layer = defaultdict(list)
for word in layer:
if word == endWord:
return layer[word]
for i in range(len(word)):
for c in 'abcdefghijklmnopqrstuvwxyz':
new_word = word[:i] + c + word[i+1:]
if new_word in wordSet:
new_layer[new_word] += [path + [new_word] for path in layer[word]]
wordSet -= set(new_layer.keys())
layer = new_layer
return []
# Example usage
begin = "hit"
end = "cog"
words = ["hot","dot","dog","lot","log","cog"]
result = findLadders(begin, end, words)
for path in result:
print(path)