473,BFS解單詞接龍

2021-10-25 10:44:36 字數 1786 閱讀 9853

問題描述

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

1,一圈一圈往外擴散這裡以beginword單詞為中心點當做是第一圈,然後把字典中和beginword只差乙個字元的單詞放到第二圈,然後再把和第二圈只差乙個字元並且在字典中存在的單詞放到第3圈……,一直這樣放,放的時候要注意不能放之前放過的,並且在放的時候遇到endword直接返回即可。

這裡以示例1為例畫個圖來看下

**如下,有詳細的注釋,應該不是很難理解

public

intladderlength

(string beginword, string endword, list

wordlist)}}

}//每往外擴一圈,長度就加1

minlen++;}

return0;

}

2,從兩邊往中間開始計算上面是從start開始往外擴散,這裡還可以乙個從start,乙個從end開始往中間走,哪個圈的元素少就先遍歷哪個,這樣可以減少迴圈的次數,如果能相遇就返回

private

intfind

(int minlen, queue

startqueue, queue

endqueue, set

dictset, set

visit)

else}}

}}//如果沒有相遇就返回-1

return-1

;}

總結這道題上兩種方式都能解決,第2種方式比第一種稍微要複雜一些,但執行效率要比第1種高。

leetCode 單詞接龍 BFS

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

leetcode 127 單詞接龍 BFS

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

leetcode127 單詞接龍(bfs)

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