题目描述
每次只能改一个字母,从 beginWord 变到 endWord,求最短转换长度。
begin/end = hit → cog
输出 = 5
思路解析
关键不是背模板,而是看懂为什么这题适合图 · BFS。
1. hit 从队列出发,距离 1:hit 从队列出发,距离 1
2. 枚举一位替换,找到 hot:枚举一位替换,找到 hot
3. hot 入队,距离 2:hot 入队,距离 2
4. 从 hot 扩展 dot、lot:从 hot 扩展 dot、lot
5. dot 扩展 dog:dot 扩展 dog
6. lot 扩展 log:lot 扩展 log
7. dog/log 都能到 cog:dog/log 都能到 cog
8. 第一次到 cog,距离就是最短 5:第一次到 cog,距离就是最短 5
把这句话记住,下次遇到同类题,就能更快选出方向。
用一个小问题检查自己是不是真的懂了。
参考代码(Python)
Python
1from collections import deque
2class Solution:
3 def ladderLength(self, beginWord, endWord, wordList):
4 words = set(wordList)
5 if endWord not in words:
6 return 0
7 q = deque([(beginWord, 1)])
8 while q:
9 word, step = q.popleft()
10 if word == endWord:
11 return step
12 for i in range(len(word)):
13 for ch in class="cl-str">'abcdefghijklmnopqrstuvwxyz':
14 nxt = word[:i] + ch + word[i+1:]
15 if nxt in words:
16 words.remove(nxt)
17 q.append((nxt, step + 1))
18 return 0复杂度分析
- 时间复杂度:O(N·L·26) —— 每个核心状态按算法要求处理固定次数
- 空间复杂度:O(N) —— 只保存必要的辅助结构或递归栈
套路模板
模板不是死背,而是提醒你写代码前先把状态、转移和边界排好。
Python
1# 图 · BFS 通用检查表
2# 1. 定义状态/指针/容器
3# 2. 每轮只做一个清晰动作
4# 3. 更新答案并处理边界易错点
- 错误写法:用 DFS 找路径 → 正确写法:最短路径用 BFS(DFS 先找到的不一定最短)
- 错误写法:只按样例推代码 → 正确写法:先写清状态含义和边界条件(样例太少,隐藏用例专打边界)
- 错误写法:变量名和动画不一致 → 正确写法:代码变量沿用动画里的核心名字(学习时最怕脑内维护两套概念)
以上文字与上方动画完全同一思路:先看动画建立直觉 → 读文字巩固 → 关掉页面自己默写一遍代码,能写出来才算真的掌握。