力扣 127 單詞接龍

2022-05-19 18:12:15 字數 1443 閱讀 2440

給定兩個單詞(beginword 和 endword)和乙個字典,找到從 beginword 到 endword 的最短轉換序列的長度。轉換需遵循如下規則:

每次轉換只能改變乙個字母。

轉換過程中的中間單詞必須是字典中的單詞。

說明:如果不存在這樣的轉換序列,返回 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" 不在字典中,所以無法進行轉換。

class

solution

setwordset = new hashset();

wordset.addall(wordlist);

//第 2 步:圖的廣度優先遍歷,必須使用佇列和表示是否訪問過的 visited 雜湊表

dequequeue = new arraydeque();

queue.offer(beginword);

setvisitedset = new hashset<>();

visitedset.add(beginword);

//第 3 步:開始廣度優先遍歷,包含起點,因此初始化的時候步數為 1

int step = 1;

while(!queue.isempty())

//替換其中的某個字元

chararray[j] =k;

string maybenextword =string.valueof(chararray);

//說明當前的轉換序列是ok的

if(wordset.contains(maybenextword))

if(!visitedset.contains(maybenextword))}}

//恢復char陣列,以便替換下乙個索引的字元

chararray[j] =tempchar;}}

step++;

}return 0;

}}

參考:

力扣127 單詞接龍

參考文章 雙向bfs為什麼比單項bfs快,這裡我們把雙向分為前向和後向,在最壞複雜度下,隨著傳遞的推進,前向傳遞會越來越複雜,速度越來越慢,這時我們根據有用資訊或者叫先驗 有先驗幹嘛不用,這裡指endword 來降低前向傳遞的複雜程度,所以可以縮短前向的匹配的時間,從而實現整體優化的效果。舉個不一定...

127 單詞接龍

思路和126差不多,區別在於只用bfs,每次訪問一層,用乙個map來儲存訪問過的結點以及與起點的距離,避免重複訪問。最後輸出map中的終點項即可 import queue class solution def ladderlength self,beginword,endword,wordlist ...

127 單詞接龍

給定兩個單詞 beginword 和 endword 和乙個字典,找到從 beginword 到 endword 的最短轉換序列的長度。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 示例 1 輸入 beginword hit endword cog wo...