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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容