LeetCode 127 單詞接龍

2021-10-10 06:41:04 字數 3107 閱讀 6284

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

通過次數72,245提交次數162,120

所以這個博文 還是 分析官方題解 給的答案

class solution 

}void addedge(string& word)

}int ladderlength(string beginword, string endword, vector& wordlist)

addedge(beginword);

if (!wordid.count(endword))

vectordis(nodenum, int_max);

int beginid = wordid[beginword], endid = wordid[endword];

dis[beginid] = 0;

queueque;

que.push(beginid);

while (!que.empty())

for (int& it : edge[x]) }}

return 0;

}};

class solution

}

void addedge(string& word)

}

for (char& it : word)

addedge(beginword);

if (!wordid.count(endword))

vectordis(nodenum, int_max);

int beginid = wordid[beginword], endid = wordid[endword];

dis[beginid] = 0;

queueque;

que.push(beginid);

while (!que.empty())

for (int& it : edge[x]) }}

return 0;}};

更快 更高 更強

class solution 

}void addedge(string& word)

}int ladderlength(string beginword, string endword, vector& wordlist)

addedge(beginword);

if (!wordid.count(endword))

vectordisbegin(nodenum, int_max);

int beginid = wordid[beginword];

disbegin[beginid] = 0;

queuequebegin;

quebegin.push(beginid);

vectordisend(nodenum, int_max);

int endid = wordid[endword];

disend[endid] = 0;

queuequeend;

queend.push(endid);

while (!quebegin.empty() && !queend.empty())

for (int& it : edge[nodebegin]) }}

int queendsize = queend.size();

for (int i = 0; i < queendsize; ++i)

for (int& it : edge[nodeend]) }}

}return 0;

}};

int ladderlength(string beginword, string endword, vector& wordlist)

addedge(beginword);

if (!wordid.count(endword))

vectordisbegin(nodenum, int_max);

int beginid = wordid[beginword];

disbegin[beginid] = 0;

queuequebegin;

quebegin.push(beginid);

vectordisend(nodenum, int_max);

int endid = wordid[endword];

disend[endid] = 0;

queuequeend;

queend.push(endid);

while (!quebegin.empty() && !queend.empty())

for (int& it : edge[nodebegin]) }}

int queendsize = queend.size();

for (int i = 0; i < queendsize; ++i)

for (int& it : edge[nodeend]) }}

}return 0;

}

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。所有單詞具有相同的長度。所有單詞只由...