LC.127. Word Ladder

LC.127. Word Ladder_第1张图片

class Solution(object):
    def ladderLength(self, beginWord, endWord, wordList):
        """
        :type beginWord: str
        :type endWord: str
        :type wordList: List[str]
        :rtype: int
        """
        from collections import  deque
        queue =deque()
        queue.append(beginWord)
        words_set = set(wordList)
        ladder = 1
        while(len(queue)):
            length = len(queue)
            for _ in range(length):
                word = queue.popleft()
                if word == endWord:
                    return ladder
                word = list(word)
                for i in range(len(word)):
                    tmp = word[i]
                    for j in range(26):
                        word[i] = chr(97+j)
                        if ''.join(word) in words_set:
                            # 这里可以删是因为如果后面某条路径出现了当前删掉的单词,那么不用考虑那条路径
                            # 相当于重走了当前的路径,那条路径肯定比当前的路径长
                            words_set.remove("".join(word))
                            queue.append("".join(word))
                        word[i] = tmp
            ladder += 1
        return 0

你可能感兴趣的:(LeetCode)