题目定位
每一次合法变换都可以看作隐式无权图上的一条边,因此题目一提“最少步数”,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 这个模式刷成体系,再去做更难变体。