#127
Hard
BFS / DFS

Word Ladder

求从 beginWord 到 endWord 的最短转换序列长度。

BFS

题目定位

每一次合法变换都可以看作隐式无权图上的一条边,因此题目一提“最少步数”,BFS 就几乎是默认答案。

关键观察

难点不在 BFS,而在于如何高效生成邻居,避免暴力和所有单词逐个比较。

目标复杂度

O(N * L * alphabet) / O(N)

这题的解法思路怎么拆

1

每一次合法变换都可以看作隐式无权图上的一条边,因此题目一提“最少步数”,BFS 就几乎是默认答案。

2

难点不在 BFS,而在于如何高效生成邻居,避免暴力和所有单词逐个比较。

3

先识别图模型,并定义邻居如何生成。

4

无权最短路优先 BFS,结构搜索优先 DFS。

参考实现

Python
# Generic pattern template
from collections import deque

def bfs(start):
    queue = deque([start])
    visited = {start}
    while queue:
        node = queue.popleft()
        for nxt in graph[node]:
            if nxt not in visited:
                visited.add(nxt)
                queue.append(nxt)

def dfs(node):
    visited.add(node)
    for nxt in graph[node]:
        if nxt not in visited:
            dfs(nxt)

常见坑点

warning

邻居生成过慢,直接超时。

warning

visited 标记太晚,导致同一个词被重复入队。

高频追问

双向 BFS 为什么能优化?

这道题里图的节点到底是什么?

继续刷相关题

先把 BFS / DFS 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 127. Word Ladder 题解思路 | Interview AiBox