题解 | #牛群最短移动序列#
牛群最短移动序列
https://www.nowcoder.com/practice/6473462e05ac4665baec04caf628abdd
- 题目考察的知识点 : 广度优先搜索, 哈希
- 题目解答方法的文字分析:
- 取出队列头部元素 curr。
- 如果 curr 等于 endWord,则返回步数 step。
- 否则遍历 wordList 中的每个单词 word,如果 word 与 curr 只差一个字符,并且没有被访问过,则将 word 加入队列并标记为已访问 visited。
- 如果队列为空,则说明无法从 beginWord 到达 endWord,返回 0。
将 beginWord 加入队列 queue 并将其标记为已访问 visited。然后进行如下操作:
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param beginWord string字符串 # @param endWord string字符串 # @param wordList string字符串一维数组 # @return int整型 # from collections import deque class Solution: def ladderLength(self, beginWord: str, endWord: str, wordList: List[str]) -> int: words = set(wordList) if endWord not in words: return 0 queue = deque([(beginWord, 1)]) visited = set([beginWord]) while queue: curr, step = queue.popleft() if curr == endWord: return step for i in range(len(curr)): for j in range(26): c = chr(ord("a") + j) if c != curr[i]: next_word = curr[:i] + c + curr[i + 1 :] if next_word in words and next_word not in visited: queue.append((next_word, step + 1)) visited.add(next_word) return 0
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路