leetcode127 單詞接龍

2021-10-10 06:36:57 字數 2288 閱讀 2991

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

這道題要想到以下三點:

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)

print

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