LeetCode 127. 单词接龙(广度优先遍历)

题目描述

给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:
每次转换只能改变一个字母。
转换过程中的中间单词必须是字典中的单词。
说明:
如果不存在这样的转换序列,返回 0。
所有单词具有相同的长度。
所有单词只由小写字母组成。
字典中不存在重复的单词。
你可以假设 beginWord 和 endWord 是非空的,且二者不相同。

LeetCode 127. 单词接龙(广度优先遍历)_第1张图片

思路

详见链接

代码

class Solution(object):
	def ladderLength(self, beginWord, endWord, wordList):
		word_set = set(wordList)
		cur_word = [beginWord]
		next_word = []
		depth = 1
		while cur_word:
			for word in cur_word:
				if word == endWord:
					return depth
				for index in range(len(word)):
					for indice in "abcdefghijklmnopqrstuvwxyz":
						new_word = word[:index] + indice + word[index+1:]
						if new_word in word_set:
							word_set.remove(new_word)
							next_word.append(new_word)
			depth += 1
			cur_word = next_word
			next_word = []
		return 0

if __name__ =="__main__":
	beginWord = "hit"
	endWord = "cog"
	wordList = ["hot","dot","dog","lot","log","cog"]
	sequence = Solution().ladderLength(beginWord,endWord,wordList)
	print(sequence)
					

效果

LeetCode 127. 单词接龙(广度优先遍历)_第2张图片

你可能感兴趣的:(Leetcode)