zoukankan      html  css  js  c++  java
  • 127. 单词接龙

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

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

    说明:

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

    示例 1:

    输入:
    beginWord = "hit",
    endWord = "cog",
    wordList = ["hot","dot","dog","lot","log","cog"]
    
    输出: 5
    
    解释: 一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",
         返回它的长度 5。
    

    示例 2:

    输入:
    beginWord = "hit"
    endWord = "cog"
    wordList = ["hot","dot","dog","lot","log"]
    
    输出: 0
    
    解释: endWord "cog" 不在字典中,所以无法进行转换。


    bfs改变每个word里的char,直到找到所有转变方式

    class Solution {
    public:
        int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
            unordered_set<string> wordset(wordList.begin(),wordList.end());
            if(!wordset.count(endWord))
                return 0;
            unordered_map<string, int> dis;
            dis.insert(make_pair(beginWord, 1));
            
            queue<string> q;
            q.push(beginWord);
            
            while (!q.empty()) {
                string word = q.front();
                q.pop();
                
                if (word == endWord) {
                    break;
                }
                
                for (int i = 0; i < word.size(); i++) {
                    string tmp = word;
                    for (char c = 'a'; c <= 'z'; c++) {
                        tmp[i] = c;
                        if (wordset.count(tmp) == 1 && dis.count(tmp) == 0) {
                            q.push(tmp);
                            dis.insert(make_pair(tmp, dis[word] + 1));
                        }
                    }
                }
            }
    
            return dis[endWord];
        }
    };
  • 相关阅读:
    docker备忘录
    GUAVA-RateLimit
    JDK各版本发展史
    C++ 基础备忘录
    浅谈MES
    MES在流程和离散制造企业的15个差别!
    mysql连接oracle补偿方案—odbc驱动
    WinForm控件Chart的图表类型
    C#的异常处理机制(try...catch...finally)
    oracle 横向列变为纵向列
  • 原文地址:https://www.cnblogs.com/xxxsans/p/13862313.html
Copyright © 2011-2022 走看看