Word Ladder

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

但这一题其实是在卡时间,卡的比较严格,所以需要把wordlist换成python字典格式,这样在搜索的时候就从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

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