126 單詞接龍 II

2021-10-19 17:42:18 字數 1524 閱讀 2140

題目描述

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

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

轉換後得到的單詞必須是字典中的單詞。

說明:

示例 1:

輸入:

beginword = "hit",

endword = "cog",

wordlist = ["hot","dot","dog","lot","log","cog"]

輸出:[

["hit","hot","dot","dog","cog"],

["hit","hot","lot","log","cog"]

]

示例 2:

輸入:

beginword = "hit"

endword = "cog"

wordlist = ["hot","dot","dog","lot","log"]

輸出:

解釋: endword "cog" 不在字典中,所以不存在符合要求的轉換序列。

題解:

單詞接龍 的高階版本,儲存轉換路徑。

在 單詞接龍 中,我們已經通過bfs找到最短路徑,下面就是根據最短路徑通過dfs搜尋所有可能的路徑。

因為在bfs中我們記錄了節點間的轉換次數關係,所以在爆搜的時候可以有效利用這個狀態,假設最小轉換次數為min_steps,從s開始進行搜尋,遍歷從s出發點的相鄰節點e,那麼可以進行剪枝:

時間複雜度:o(2

n∗n∗

l)

o(2^n*n*l)

o(2n∗n

∗l)

額外空間複雜度:o(n

2∗l)

o(n^2 * l)

o(n2∗l

)

class solution 

s[i] = st[i];}}

for( const auto& it : lists )

s[i] = it[i];}}

}int bfs( const string& st, const string& ed ) }}

return dis[ed];

}void dfs( const string& ed, int min_steps )

for( const auto& it : g[s] ) }}

vector> findladders(string beginword, string endword, vector& wordlist)

};/*

記憶體:28.5mb,擊敗:52.58%

*/

126 單詞接龍 II

題目.high 這其實就是圖的演算法,dijkstra演算法 這道題,先求直達的最小路徑,這個用bfs沒啥好說的,一般求路徑的問題就是要用dfs,可是不需要求所有的到達路徑,也不需要求隨意的一條到達路徑,不然dfs準沒錯。所以我們還是要用bfs,不過在bfs的時候,把經過的所有節點都求出從開始到他這...

126 單詞接龍 II

給定兩個單詞 beginword 和 endword 和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 如果不存在這樣的轉換序列,返回乙個空列表。所有單詞具有相...

126 單詞接龍 II

題目描述 給定兩個單詞 beginword 和 endword 和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換後得到的單詞必須是字典中的單詞。說明 如果不存在這樣的轉換序列,返回乙個空列表。所有單詞...