1def ladderLength(beginWord, endWord, wordList):
2 if endWord not in wordList:
3 return 0
4
5 dict_set = set(wordList)
6 queue = [beginWord]
7 visited = {beginWord}
8 steps = 1
9
10 while queue:
11 level_size = len(queue)
12
13 for i in range(level_size):
14 current = queue.pop(0)
15 if current == endWord:
16 return steps
17
18 # Get neighbors (differ by 1 letter)
19 for j in range(len(current)):
20 for c in 'abcdefghijklmnopqrstuvwxyz':
21 neighbor = current[:j] + c + current[j+1:]
22 if neighbor in dict_set and neighbor not in visited:
23 visited.add(neighbor)
24 queue.append(neighbor)
25
26 steps += 1
27
28 return 0