Leetcode 127. Word Ladder
阿新 • • 發佈:2018-12-13
Given two words (beginWord and endWord), and a dictionary's word list, find the length of shortest transformation sequence from beginWord to endWord, such that:
- Only one letter can be changed at a time.
- Each transformed word must exist in the word list. Note that beginWord is not a transformed word.
Note:
- Return 0 if there is no such transformation sequence.
- All words have the same length.
- All words contain only lowercase alphabetic characters.
- You may assume no duplicates in the word list.
- You may assume beginWord and endWord are non-empty and are not the same.
Example 1:
Input: beginWord = "hit", endWord = "cog", wordList = ["hot","dot","dog","lot","log","cog"] Output:5 Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog", return its length 5.
Example 2:
Input: beginWord = "hit" endWord = "cog" wordList = ["hot","dot","dog","lot","log"] Output: 0 Explanation: The endWord "cog" is not in wordList, therefore no possibletransformation.
Answer:
BFS,替換單詞中的字母
注意:使用set而不用list
class Solution(object):
def ladderLength(self, beginWord, endWord, wordList):
"""
:type beginWord: str
:type endWord: str
:type wordList: List[str]
:rtype: int
"""
wordListset=set(wordList)
if endWord not in wordListset:
return 0
wl=len(beginWord)
queue=[]
queue.append((beginWord,1))
visited={beginWord}
while queue!=[]:
#print queue
(w,l)=queue.pop(0)
for i in range(wl):
for j in string.ascii_lowercase:
if j!=w[i]:
tempneww=w[0:i]+j+w[i+1:]
if tempneww in wordListset and tempneww not in visited:
if tempneww==endWord:
return l+1
queue.append((tempneww,l+1))
visited.add(tempneww)
return 0