127. Word Ladder

class Solution(object):
    def ladderLength(self, beginWord, endWord, wordList):
        """
        :type beginWord: str
        :type endWord: str
        :type wordList: Set[str]
        :rtype: int
        """
        wordList.add(endWord)
        cur=[beginWord] #possible transformation at each stage
        l=len(beginWord)
        distance=0 # keep track of the number of transformations 
        visited=set([beginWord]) #keep track of the set of visited words 
        while cur:
            next=[] #temp list to store each possible transformation at each stage 
            for word in cur:
                if word==endWord:
                    return distance+1
                for i in xrange(l): 
                    for j in 'abcdefghijklmnopqrstuvwxyz':
                        candidate=word[:i]+j+word[i+1:]
                        if candidate not in visited and candidate in wordList:
                            next.append(candidate)
                            visited.add(candidate)
                    
            distance+=1
            cur=next
        return 0
                

你可能感兴趣的:(127. Word Ladder)