Leetcode127: 單詞接龍

【題目描述】
給定兩個單詞(beginWord 和 endWord)和一個字典偿警,找到從 beginWord 到 endWord 的最短轉(zhuǎn)換序列的長度。轉(zhuǎn)換需遵循如下規(guī)則:

每次轉(zhuǎn)換只能改變一個字母盒使。
轉(zhuǎn)換過程中的中間單詞必須是字典中的單詞七嫌。
說明:

如果不存在這樣的轉(zhuǎn)換序列,返回 0英妓。
所有單詞具有相同的長度。
所有單詞只由小寫字母組成辑畦。
字典中不存在重復(fù)的單詞。
你可以假設(shè) beginWord 和 endWord 是非空的纯出,且二者不相同暂筝。

示例 1:

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

輸出: 5

解釋: 一個最短轉(zhuǎn)換序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog",
返回它的長度 5硬贯。

【思路分析】
BFS

  1. 初始化將beginWord加入到queue中澄成,然后一次性pop出queue中所有的單詞,將其相鄰的單詞加入queue中
  2. 如何找到相鄰單詞 - 暴力枚舉 對于單詞的每一位墨状,將它換為'a'-'z'。如果變更后的單詞在wordSet中列赎,則將其加入queue镐确。 是target則返回。不是wordSet則pass源葫。
  3. 由于求最短路徑,一個word只能用一次嚷狞, 所以每次把單詞加入Queue的時(shí)候把該單詞從Queue中刪掉

【坑】

  1. 注意題意荣堰,這里返回的是鏈表的長度振坚,不是需要改變的步驟
  2. 對一個單詞修改循環(huán)后,要記得還原回原來的 --- 開始修改遍歷前用變量保存本來這個位置的字母

代碼

int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
    // create wordlist set
    unordered_set<string> wordSet;
    for (int i = 0; i < wordList.size(); ++i) {
        wordSet.insert(wordList[i]);
    }

    queue<string> q;
    int step = 0;

    if (!wordSet.count(endWord)) return 0;
    if (wordSet.count(beginWord)) {
        wordSet.erase(beginWord);
    }

    q.push(beginWord);
    while (!q.empty()) {
        step++;
        int size = q.size();
        while (size > 0) {
            string cur = q.front();
            q.pop();
            size--;
            for (int i = 0; i < cur.size(); i++) {
                char c = cur[i];
                for (char z = 'a'; z <= 'z'; z++) {
                    cur[i] = z;
                    if (cur == endWord) return step + 1;
                    else if (wordSet.count(cur)) {
                        wordSet.erase(cur);
                        //cout << "step: " << step << endl;
                        //cout << cur << endl;
                        //cout << "-----------" << endl;
                        q.push(cur);
                    }
                }
                //back the start state 
                cur[i] = c;   
            }
        }

    }
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末传货,一起剝皮案震驚了整個濱河市损离,隨后出現(xiàn)的幾起案子绝编,更是在濱河造成了極大的恐慌,老刑警劉巖十饥,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗堵,死亡現(xiàn)場離奇詭異眷昆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)亚斋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門纸泡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人女揭,你說我怎么就攤上這事吧兔∨坻遥” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵欧穴,是天一觀的道長涮帘。 經(jīng)常有香客問我调缨,道長疮鲫,這世上最難降的妖魔是什么俊犯? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任燕侠,我火速辦了婚禮立莉,結(jié)果婚禮上蜓耻,老公的妹妹穿的比我還像新娘。我一直安慰自己饶氏,他們只是感情好疹启,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布柠衅。 她就那樣靜靜地躺著菲宴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喝峦。 梳的紋絲不亂的頭發(fā)上谣蠢,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天眉踱,我揣著相機(jī)與錄音挤忙,去河邊找鬼。 笑死谈喳,一個胖子當(dāng)著我的面吹牛册烈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播婿禽,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼赏僧,長吁一口氣:“原來是場噩夢啊……” “哼大猛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淀零,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挽绩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驾中,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唉堪,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年哀卫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巨坊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撬槽。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖移剪,靈堂內(nèi)的尸體忽然破棺而出纵苛,到底是詐尸還是另有隱情攻人,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布磅叛,位于F島的核電站兆龙,受9級特大地震影響详瑞,放射性物質(zhì)發(fā)生泄漏泻帮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蝶押、第九天 我趴在偏房一處隱蔽的房頂上張望茎截。 院中可真熱鬧,春花似錦撕攒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽孽查。三九已至,卻和暖如春瓣铣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蓖救。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洋满,地道東北人正罢。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓裆泳,卻偏偏與公主長得像运提,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345