刷题笔记 DFS and BFS

举例:

给定字典中的两个词,长度相等。写一个方法,把一个词转换成另一个词, 但是一次只能改变一个字符。每一步得到的新词都必须能在字典中找到。

编写一个程序,返回一个可能的转换序列。如有多个可能的转换序列,你可以返回任何一个。

示例 1:

输入:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

输出:
["hit","hot","dot","lot","log","cog"]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-transformer-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

DFS 深度优先搜索,采用stack后进先出模式

class Solution:
    def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[str]:
        # DFS
        hashmap = collections.defaultdict(list)
        for word in wordList:
            for i in range(len(word)):
                hashmap[word[:i] + '*' + word[i + 1:]].append(word)
        stack = [beginWord]
        w_dict = {beginWord: [beginWord]}
        while stack:
            word = stack.pop()
            if word == endWord:
                return w_dict[word]
            for i in range(len(word)):
                if word[:i] + '*' + word[i + 1:] in hashmap:
                    for tmp in hashmap[word[:i] + '*' + word[i + 1:]]:
                        if tmp not in w_dict:
                            w_dict[tmp] = w_dict[word] + [tmp]
                            stack.append(tmp)
        return []

BFS 广度优先搜索,采用队列queue先进先出

class Solution:
    def findLadders(self, beginWord: str, endWord: str, wordList: List[str]) -> List[str]:
        # BFS
        hashmap = collections.defaultdict(list)
        for word in wordList:
            for i in range(len(word)):
                hashmap[word[:i]+"*"+word[i+1:]].append(word)
        queue = collections.deque([beginWord])
        w_dict = {beginWord:[beginWord]}
        while queue:
            word = queue.popleft()
            if word == endWord:
                return w_dict[word]
            for i in range(len(word)):
                if word[:i]+"*"+word[i+1:] in hashmap:
                    for tmp in hashmap[word[:i]+"*"+word[i+1:]]:
                        w_dict[tmp] = w_dict[word]+[tmp]
                        queue.append(tmp)
        return []

猜你喜欢

转载自blog.csdn.net/qq_40801709/article/details/106769381