【LeetCode】解题126:Word Ladder II(BFS算法)

LeetCode解题 126:Word Ladder II(BFS算法)

Problem 126: Word Ladder II [Hard]

Given two words (beginWord and endWord), and a dictionary’s word list, find all shortest transformation sequence(s) from beginWord to endWord, such that:

  1. Only one letter can be changed at a time
  2. Each transformed word must exist in the word list. Note that beginWord is not a transformed word.

Note:

  • Return an empty list if there is no such transformation sequence.
  • All words have the same length.
  • All words contain only lowercase alphabetic characters.
  • You may assume no duplicates in the word list.
  • You may assume beginWord and endWord are non-empty and are not the same.

Example 1:

Input:
beginWord = “hit”,
endWord = “cog”,
wordList = [“hot”,“dot”,“dog”,“lot”,“log”,“cog”]

Output:
[
[“hit”,“hot”,“dot”,“dog”,“cog”],
[“hit”,“hot”,“lot”,“log”,“cog”]
]

Example 2:

Input:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,“dot”,“dog”,“lot”,“log”]

Output: []

Explanation: The endWord “cog” is not in wordList, therefore no possible transformation.

来源:LeetCode

解题思路

因为题中要求最短路径,更适合使用BFS算法求解该题,在某一层搜索到endWord后即可停止搜索。

具体思路:

  • 首先查找wordList中是否含有endWord,如果没有,直接返回空。
  • 然后使用bfs搜索,队列prePaths存储到当前层的所有路径,依次推出每个路径进行下一层搜索:
    a. 找到每个路径的最末单词lastWord;
    b. 使用transform()函数返回lastWord的所有分支(即只改变一位字符就能到达的单词);
    c. 遍历所有分支word:
    i. 如果在之前层已经出现过( w o r d ∈ S e t < > p r e W o r d word \in Set<> preWord wordSet<>preWord),那么可以直接剪枝,因为一定不会是最短路径;
    ii. 如果word = endWord,可以把path加入最终结果,并将剩余的分支word直接剪枝,因为当前父节点已经到达了最终单词,没必要再遍历剩余分支,并且等到当前层全部遍历完后可以停止搜索;
    iii. 如果没有以上情况,word加入path后把path加入队列prePaths。
  • 当前层搜索结束后,如果已经出现endWord,直接停止搜索返回结果;如果没有还没搜索到endWord,继续搜索下一层。

假设从beginWord到endWord需要长度d,每个word分支为k,则时间复杂度为 O ( k d )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值