給定兩個單詞(beginword 和 endword)和乙個字典,找到從 beginword 到 endword 的最短轉換序列的長度。轉換需遵循如下規則:
每次轉換只能改變乙個字母。
轉換過程中的中間單詞必須是字典中的單詞。
說明:
示例 1:
示例 2:輸入:
beginword =
"hit"
,endword =
"cog"
,wordlist =
["hot"
,"dot"
,"dog"
,"lot"
,"log"
,"cog"
]輸出:
5解釋: 乙個最短轉換序列是 "hit"
->
"hot"
->
"dot"
->
"dog"
->
"cog"
, 返回它的長度 5。
這道題要想到以下三點:輸入:
beginword =
"hit"
endword =
"cog"
wordlist =
["hot"
,"dot"
,"dog"
,"lot"
,"log"
]輸出:
0解釋: endword "cog" 不在字典中,所以無法進行轉換。
class
solution
auto origin = temp;
for(
int i =
0; i < wlen;
++i)
temp = origin;}}
}}return0;
}};
from typing import list
from collections import deque
class
solution
:def
ladderlength
(self, beginword:
str, endword:
str,
wordlist: list[
str])-
>
int:
hset =
set(wordlist)
# 儲存單詞
visit =
set(
)# 儲存已訪問的單詞
if endword not
in hset:
# 結尾單詞不在單詞表中
return
0 queue = deque(
) res =
0while queue:
n =len(queue)
(n) res +=
1while n:
n = n -
1 temp = queue.popleft(
)if temp == endword:
return res
temp =
list
(temp)
#首先將字串轉化為列表,才能單獨訪問每乙個字元
for i in
range
(len
(beginword)):
ori_ch = temp[i]
#只將更改的字元儲存,因為在python中,對整個字串拷貝,相當於c++中的引用,二者共同占用同一片空間
for j in
range(26
):temp[i]
=chr
(ord
('a'
)+ j)
# ord將字元轉化成對應的ascii,chr將ascii轉化為對應的字元
ntemp =
''.join(temp)
# 將列表形式的單詞轉化為字串形式,以便接下來判斷是否在集合中
if ntemp not
in visit and ntemp in hset:
visit.add(ntemp)
temp[i]
= ori_ch
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。所有單詞具有相同的長度。所有單詞只由...