-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathWord Ladder.py
26 lines (26 loc) · 935 Bytes
/
Word Ladder.py
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
class Solution:
def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int:
e = defaultdict(list)
m = len(beginWord)
for word in wordList + [beginWord]:
for i in range(m):
w = word[:i] + "*" + word[i + 1:]
e[w].append(word)
q = deque([beginWord])
used = set([beginWord])
d = 0
while q:
d += 1
for _ in range(len(q)):
word = q.popleft()
for i in range(m):
w = word[:i] + "*" + word[i + 1:]
if w in e:
for v in e[w]:
if v == endWord:
return d + 1
if v not in used:
q.append(v)
used.add(v)
e.pop(w)
return 0