class Solution(object):
def ladderLength(self, beginWord, endWord, wordList):
"""
:type beginWord: str
:type endWord: str
:type wordList: List[str]
:rtype: int
"""
#wordList.append(endWord)
q = []
q.append((beginWord,1))
while q:
(curr,lenth) = q.pop(0)
if curr == endWord:
return lenth
for i in range(len(curr)):
part1 = curr[:i]
part2 = curr[i+1:]
for j in 'abcdefghijklmnopqrstuvwxyz':
if curr[i] != j:
nextword = part1 + j + part2
if nextword in wordList:
q.append((nextword,lenth+1))
wordList.remove(nextword)
return 0
但這一題其實(shí)是在卡時(shí)間侦厚,卡的比較嚴(yán)格发框,所以需要把wordlist換成python字典格式梢灭,這樣在搜索的時(shí)候就從o(n)變成o(1)了
class Solution(object):
def ladderLength(self, beginWord, endWord, wordList):
"""
:type beginWord: str
:type endWord: str
:type wordList: Set[str]
:rtype: int
"""
dic = {}
for w in wordList:
if w not in dic:
dic[w] = 1
q = [(beginWord,1)]
while q:
e,lens = q.pop(0)
if e == endWord: return lens
for i in range(len(e)):
left = e[:i]
right = e[i + 1:]
for c in 'abcdefghigklmnopqrstuvwxyz':
if e[i] != c:
nextWord = left + c + right
if nextWord in dic:
q.append((nextWord,lens + 1))
del dic[nextWord]
return 0