Word Ladder

此题需要对起始词的每一个位置进行另外25个字母的替换从而找到一个one step之内的词且此词在wordList之内,比较trick的地方在于需要每次找到这样一个词之后把这个词从wordList中删除,因为是BFS,当到达此词时肯定已经是最短路径了,所以不需要其他方法了,下面是代码

class Solution(object):
    def ladderLength(self, beginWord, endWord, wordList):
        """
        :type beginWord: str
        :type endWord: str
        :type wordList: List[str]
        :rtype: int
        """
        q = collections.deque([[beginWord, 1]])
        wordList = set(wordList)

        while q:
            base, step = q.pop()
            if base == endWord:
                return step
            for i in xrange(len(base)):
                left, right = base[ : i], base[i + 1 : ]
                for j in xrange(ord('a'), ord('{')):
                    if chr(j) == base[i]:
                        continue
                    nxtWord = left + chr(j) + right
                    if nxtWord in wordList:
                        wordList.remove(nxtWord)
                        q.appendleft([nxtWord, step + 1])

        return 0

results matching ""

    No results matching ""