leetcode 127單詞接龍(001)

2021-10-04 14:52:16 字數 1351 閱讀 2943

給定兩個單詞(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」 不在字典中,所以無法進行轉換。

方法:使用unorderd_set 和queue。這道題浪費了快四個小時,一開始我的想法是從record中找與當前單詞只有乙個不同的單詞,如果存在進佇列,然後刪除。但是一直有乙個樣例通不過去,參考別人的**感覺也是這個思想,錯誤原因需要繼續分析。這個**就算正確,也有乙個缺點,每次從record中尋找,時間複雜度是o(n),不如參考的方法有效,特別是單詞量很大。

錯誤**樣例:思想與下面的正確**基本一致。

求錯誤原因。。。

class

solution

if(dif ==1)

}}return0;

}};

正確**樣例。

思路:(1)首先看字典裡面有沒有endword單詞,如果沒有返回0.

(2)建立set將單詞列表放入,建立佇列兩個引數,第乙個引數是單詞,第二個是需要的步數。beginword入隊。

(3)取出佇列第乙個單詞,將單詞從第乙個字母到最後乙個字母遍歷。把單詞的乙個字母拿出來然後換成a-z中的乙個,看record中有沒有,有的話放入佇列,然後刪除。

直到word == endwor的,返回level。

class

solution

} word[i]

= newword;}}

return0;

}};

LeetCode 127 單詞接龍

解題思路 1 這道題要找乙個最短路徑,可以聯想到圖的相關演算法 雖然我當時沒想到 那麼是不是應該使用最短路徑的相關演算法呢。其實不用 因為這個圖里每條邊的長度都是1,用乙個廣度優先演算法就搞定了。2規模的問題,如果你遍歷list裡的每個單詞的話,你會發現一直超時,因為有的list的規模給到了上千,每...

Leetcode 127單詞接龍

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

Leetcode 127 單詞接龍

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