Leetcode 127單詞接龍

2021-09-14 05:19:32 字數 1517 閱讀 7906

給定兩個單詞(beginword 和 endword)和乙個字典,找到從 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" 不在字典中,所以無法進行轉換。

用dfs和bfs都行,本題用bfs效率更高。

最開始想的是把每個單詞能轉成的單詞用multimap記錄下來。

然後再用bfs進行遍歷,這樣就減少了重複進行對比的次數。

但是如果單詞多了起來後,效率就很低了。

class solution

if(cnt == 1)

}for (int i = 0; i < wordlist.size(); i++)

if (cnt == 1)}}

queueq;

q.push(beginword);

mapvisit;

visit[beginword] = true;

int ans = 0;

while(!q.empty())

if (!visit[(*it).second])}}

}return 0;

}};

優化1:倒著搜尋比正著搜尋效率更高,因為倒著搜尋無效的結果比正著的少很多。

class solution

if(cnt == 1)

}for (int i = 0; i < wordlist.size(); i++)

if (cnt == 1)}}

queueq;

q.push(endword);

mapvisit;

visit[endword] = true;

int ans = 0;

while(!q.empty())

if (!visit[(*it).second])}}

}return 0;

}};

優化2:

因為只有小寫字母,字母只有26個,所以用在每個位置進行字母的變化,再用上set的高效率查詢。

每次查詢的複雜度為,字串長度 * 26 * set.find()

倒著查詢,效率更高。

class solution

}front = temp;}}

}return 0;

}};

LeetCode 127 單詞接龍

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

Leetcode 127 單詞接龍

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

Leetcode 127 單詞接龍

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