127 單詞接龍

2021-10-10 06:59:56 字數 1158 閱讀 4610

給定兩個單詞(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。

圖的最小路徑問題,把單詞看作是圖上的乙個點,只有乙個元素不同的單詞才會有連線,找從start到end最小的路徑,用bfs

雙段bfs,分別從start和end同時開始遍歷,每一次從預選搜尋量小的開始bfs(為了減小搜尋量)

如果碰到已經被另一段訪問過的元素(相遇),那麼當前step就是最短路徑,否則start到end不存在路徑,每擴充套件下一層時step+1

tip:用雜湊表存放字典,可以加快搜尋速度,避免超時

class solution ;

//雜湊,加快速度

if(wordset.find(endword) == wordset.end()) return 0;

//存放begin搜尋集合

unordered_setbeginset;

//存放end搜尋集合

unordered_setendset;

int step = 1;

for(; !beginset.empty();)}}

//beginset存放每次搜尋量少的那個集合,endset存放搜尋量大的那個集合

if(tempset.size() < endset.size())

beginset = tempset;

else

}return 0;

}};

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...

127 單詞接龍

leetcode 127.單詞接龍 最短問題 bfs 廣度優先遍歷 廣度優先遍歷 佇列 queue 先進先出 是 bfs 的核心 1.1 visset 儲存已經走過的節點路徑 將 list 換成 set 可以更高效率的找到是否存在重複元素 雙向廣度優先遍歷 去掉了 queue 佇列 使用了 兩個 s...