给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列。转换需遵循如下规则:

  1. 每次转换只能改变一个字母。
  2. 转换过程中的中间单词必须是字典中的单词。

说明:

  • 如果不存在这样的转换序列,返回一个空列表。
  • 所有单词具有相同的长度。
  • 所有单词只由小写字母组成。
  • 字典中不存在重复的单词。
  • 你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

示例 1:

输入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]输出:
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]
]

示例 2:

输入:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]输出: []解释: endWord "cog" 不在字典中,所以不存在符合要求的转换序列。

class Solution {
public:
    vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) {
        vector<vector<string>> res;
        unordered_set<string> dict(wordList.begin(), wordList.end());
        vector<string> p{beginWord};
        queue<vector<string>> paths;
        paths.push(p);
        int level = 1, minLevel = INT_MAX;
        unordered_set<string> words;
        while (!paths.empty()) {
            auto t = paths.front(); paths.pop();
            if (t.size() > level) {
                for (string w : words) dict.erase(w);
                words.clear();
                level = t.size();
                if (level > minLevel) break;
            }
            string last = t.back();
            for (int i = 0; i < last.size(); ++i) {
                string newLast = last;
                for (char ch = 'a'; ch <= 'z'; ++ch) {
                    newLast[i] = ch;
                    if (!dict.count(newLast)) continue;
                    words.insert(newLast);
                    vector<string> nextPath = t;
                    nextPath.push_back(newLast);
                    if (newLast == endWord) {
                        res.push_back(nextPath);
                        minLevel = level;
                    } else paths.push(nextPath);
                }
            }
        }
        return res;
    }
};

126.单词接龙II相关推荐

  1. Leetcode.126 单词接龙 II

    题目链接 Leetcode.126 单词接龙 II 题目描述 按字典 wordList完成从单词 beginWord到单词 endWord转化,一个表示此过程的 转换序列 是形式上像 beginWor ...

  2. LeetCode 126. 单词接龙 II(图的BFS)

    1. 题目 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列. 转换需遵循如下规则: 每次转换只能 ...

  3. leetcode 126. 单词接龙 II

    leetcode 126题 介绍 方法一 代码 Solution.java Test.java 方法二 算法介绍 在这个过程中需要注意的问题 代码 Solution.java Test.java 介绍 ...

  4. LeetCode 126 单词接龙 II

    题目描述 给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则:每次转换只能改变一 ...

  5. 126. 单词接龙 II

    给定两个单词(beginWord 和 endWord)和一个字典 wordList,找出所有从 beginWord 到 endWord 的最短转换序列.转换需遵循如下规则: 每次转换只能改变一个字母. ...

  6. LeetCode——126. 单词接龙 II

    概述 题目地址 题目不难理解,这里不需要额外解释 思路 首先 题目要求寻找最短转换序列,那么我们容易想到使用BFS BFS思路这里不再介绍 沿着BFS考虑代码编写,问题在于如何正确保存获取目标单词的路 ...

  7. 2021-06-14(126. 单词接龙 II)

    class Solution {public List<List<String>> findLadders(String beginWord, String endWord, ...

  8. 【每日刷题】单词接龙II

    题目地址 https://leetcode-cn.com/problems/word-ladder-ii/ 题目描述:单词接龙II 给定两个单词(beginWord 和 endWord)和一个字典 w ...

  9. 【数据结构与算法】之深入解析“单词接龙II”的求解思路与算法示例

    一.题目要求 按字典 wordList 完成从单词 beginWord 到单词 endWord 转化,一个表示此过程的转换序列是形式上像 beginWord -> s1 -> s2 -&g ...

  10. lintcode 单词接龙II

    题意 给出两个单词(start和end)和一个字典,找出所有从start到end的最短转换序列 比如: 1.每次只能改变一个字母. 2.变换过程中的中间单词必须在字典中出现. 注意事项 所有单词具有相 ...

最新文章

  1. I need to follow my heart.
  2. 使用Sentinel配置Redis 3.x主从高可用服务
  3. 吴恩达作业9:卷积神经网络实现手势数字的识别(基于tensorflow)
  4. window环境读linux文件,Windows本地环境和Linux腾讯云服务器之间传输文件的方法
  5. QT保留小数点后位数
  6. gridlayout布局单元格宽度设置_安卓界面布局之线性布局
  7. python plt调整子图间隔
  8. 【Rollo的Python之路】Python 爬虫系统学习 (二) Requests 模块学习
  9. Python利用Graphviz画图
  10. ajax一直返回 error
  11. Unity3D学习1--Unity基础
  12. vulhub-靶场实战-安装
  13. app开发,开发app的具体步骤来啦
  14. 区块链技术应用到现实场景中,是个什么样?
  15. 【嵌入式linux】使用4G模块EC20自适应运营商和ppp拨号上网
  16. Matlab绘图(二)—变色散点图二维、三维绘制
  17. ReactNative 最新教程
  18. Android智能电视焦点控制
  19. ip设置与防火墙外网映射
  20. 解决 Java poi 3.8 等版本 操作 word 插入 图片 不成功的问题

热门文章

  1. Node.js简介与架构
  2. linux centos挂载数据盘教程
  3. MySQL主从复制--mysql-proxy实现MySQL-5.6读写分离
  4. linux 如何查看 块设备_理解Linux操作系统中的块设备
  5. Mac电脑下使用Socket报错socket抛出Can’t assign requested address解决
  6. phpstorm配置ftp,自动更新代码
  7. Install/RemoveoftheServiceDenied!
  8. android禁止wifi,android – 防止WiFi-direct在不使用时关闭
  9. java删除未引用的库_利用Proguard移除无用代码以及碰到的坑
  10. hadoop namenode启动不了_hadoop全分布式是个什么鬼?!动手搭建Hadoop(4)