最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)

 更新時(shí)間:2021年07月27日 14:32:06   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 126. Word Ladder II 詞語階梯之二

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.

個(gè)人感覺這道題是相當(dāng)有難度的一道題,它比之前那道 Word Ladder 要復(fù)雜很多,全場(chǎng)第四低的通過率 12.9% 正說明了這道題的難度,博主也是研究了網(wǎng)上別人的解法很久才看懂,然后照葫蘆畫瓢的寫了出來,下面這種解法的核心思想是 BFS,大概思路如下:目的是找出所有的路徑,這里建立一個(gè)路徑集 paths,用以保存所有路徑,然后是起始路徑p,在p中先把起始單詞放進(jìn)去。然后定義兩個(gè)整型變量 level,和 minLevel,其中 level 是記錄循環(huán)中當(dāng)前路徑的長度,minLevel 是記錄最短路徑的長度,這樣的好處是,如果某條路徑的長度超過了已有的最短路徑的長度,那么舍棄,這樣會(huì)提高運(yùn)行速度,相當(dāng)于一種剪枝。還要定義一個(gè) HashSet 變量 words,用來記錄已經(jīng)循環(huán)過的路徑中的詞,然后就是 BFS 的核心了,循環(huán)路徑集 paths 里的內(nèi)容,取出隊(duì)首路徑,如果該路徑長度大于 level,說明字典中的有些詞已經(jīng)存入路徑了,如果在路徑中重復(fù)出現(xiàn),則肯定不是最短路徑,所以需要在字典中將這些詞刪去,然后將 words 清空,對(duì)循環(huán)對(duì)剪枝處理。然后取出當(dāng)前路徑的最后一個(gè)詞,對(duì)每個(gè)字母進(jìn)行替換并在字典中查找是否存在替換后的新詞,這個(gè)過程在之前那道 Word Ladder 里面也有。如果替換后的新詞在字典中存在,將其加入 words 中,并在原有路徑的基礎(chǔ)上加上這個(gè)新詞生成一條新路徑,如果這個(gè)新詞就是結(jié)束詞,則此新路徑為一條完整的路徑,加入結(jié)果中,并更新 minLevel,若不是結(jié)束詞,則將新路徑加入路徑集中繼續(xù)循環(huán)。寫了這么多,不知道你看暈了沒有,還是看代碼吧,這個(gè)最有效:

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;
    }
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/126

類似題目:

Word Ladder

參考資料:

https://leetcode.com/problems/word-ladder-ii/

http://yucoding.blogspot.com/2014/01/leetcode-question-word-ladder-ii.html

https://leetcode.com/problems/word-ladder-ii/discuss/40487/Java-Solution-with-Iteration

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(126.詞語階梯之二)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)詞語階梯之二內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法

    VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法

    這篇文章主要介紹了VC++實(shí)現(xiàn)輸出GIF到窗體并顯示GIF動(dòng)畫的方法,需要的朋友可以參考下
    2014-07-07
  • Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信

    這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)兩個(gè)獨(dú)立窗口的信號(hào)通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言memset函數(shù)使用方法詳解

    C語言memset函數(shù)使用方法詳解

    這篇文章主要介紹了C語言memset函數(shù)使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這樣的方法,需要的朋友可以參考下
    2017-10-10
  • 詳談C語言指針

    詳談C語言指針

    這篇文章主要介紹了C語言的指針,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下
    2021-10-10
  • 淺談C++ Socket編程

    淺談C++ Socket編程

    本文給大家簡單介紹了C++中的Socket編程的種類以及sockets編程的8個(gè)步奏,簡單生動(dòng),有需要的小伙伴可以參考下
    2017-07-07
  • 一篇帶你了解C語言--位操作詳情

    一篇帶你了解C語言--位操作詳情

    這篇文章主要介紹了關(guān)于C語言位運(yùn)算的簡單示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn)(保姆級(jí)成功版教程)

    Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn)(保姆級(jí)成功版教程)

    本文主要介紹了Qt連接MySQL數(shù)據(jù)庫的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類

    如何使用C++結(jié)合OpenCV進(jìn)行圖像處理與分類

    在計(jì)算機(jī)視覺領(lǐng)域,OpenCV與C++結(jié)合能高效處理和分類圖像,C++的高執(zhí)行效率適合大規(guī)模數(shù)據(jù)處理,OpenCV提供豐富的功能,如圖像預(yù)處理和機(jī)器學(xué)習(xí)算法,安裝OpenCV需要配置環(huán)境和添加庫文件,本文詳細(xì)介紹了使用C++和OpenCV進(jìn)行圖像分類的過程,包括使用SVM和深度學(xué)習(xí)模型
    2024-09-09
  • 一文帶你認(rèn)識(shí)C語言的聯(lián)合體和枚舉

    一文帶你認(rèn)識(shí)C語言的聯(lián)合體和枚舉

    聯(lián)合體(Union)是一種特殊的數(shù)據(jù)結(jié)構(gòu),允許在同一內(nèi)存地址上存儲(chǔ)不同類型的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于C語言聯(lián)合體和枚舉的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • 淺談C++空間配置器allocator

    淺談C++空間配置器allocator

    在STL中,Memory Allocator處于最底層的位置,為一切的Container提供存儲(chǔ)服務(wù),是一切其他組件的基石。對(duì)于一般使用 STL 的用戶而言,Allocator是不可見的。本文將主要介紹C++空間配置器allocator
    2021-06-06

最新評(píng)論

保定市| 雷山县| 鄂州市| 鄂尔多斯市| 九江县| 上蔡县| 安庆市| 航空| 抚松县| 鄢陵县| 佛教| 邳州市| 高州市| 大理市| 惠水县| 高台县| 白朗县| 明星| 稻城县| 绥江县| 临泽县| 南丹县| 翁源县| 廊坊市| 乌兰县| 阜新| 盐源县| 阳江市| 铁力市| 海淀区| 孝感市| 三门峡市| 商南县| 甘谷县| 景东| 固镇县| 平邑县| 广东省| 常州市| 昌邑市| 岱山县|