美文网首页
Lintcode 120. Word Ladder

Lintcode 120. Word Ladder

作者: woniudear | 来源:发表于2018-12-17 05:08 被阅读0次

    bfs的一道题。给出start和end的题,还有一组dict,每次只能变一个字母,求最短用多少个词可以变过去。例子:
    start = "hit"
    end = "cog"
    dict = ["hot","dot","dog","lot","log"]

    我的思路:首先把dict转化为set,然后把end也放进去。然后建立一个queue来存放转化的词和次序,对于start每个字母从abcd一直变下去,如果在dict中,就存到queue中。然后从queue中出来的词,如果等于end,那么就说明是最短的路径了。如果不等于end,就继续执行上述操作。
    如果queue为空都没找到,那说明就没有这个词了。
    python代码:

    from collections import deque
    class Solution:
        """
        @param: start: a string
        @param: end: a string
        @param: dict: a set of string
        @return: An integer
        """
        def ladderLength(self, start, end, dict):
            # write your code here
            diction = set(dict)
            diction.add(end)
            queue = deque()
            queue.append((start, 1))
            while queue:
                word, i = queue.popleft()
                if word == end:
                    return i
                for letter in 'abcdefghijklmnopqrstuvwxyz':
                    for j in range(len(word)):
                        newword = list(word)
                        if letter != newword[j]:
                            newword[j] = letter
                        newword = ''.join(newword)
                        if newword in diction:
                            queue.append((newword, i+1))
                            diction.remove(newword)
            return 0
    

    相关文章

      网友评论

          本文标题:Lintcode 120. Word Ladder

          本文链接:https://www.haomeiwen.com/subject/psnfkqtx.html