[Leetcode]127. Word Ladder@python

来源:互联网 发布:马云在阿里的影响力 编辑:程序博客网 时间:2024/04/29 23:15

题目

Given two words (beginWord and endWord), and a dictionary’s word list, find the length of shortest transformation sequence from beginWord to endWord, such that:

Only one letter can be changed at a time
Each intermediate word must exist in the word list
For example,

Given:
beginWord = “hit”
endWord = “cog”
wordList = [“hot”,”dot”,”dog”,”lot”,”log”]
As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
return its length 5.

Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.

题目要求

给定两个单词,将单词1转变为单词2,每次转变只能改变一个字母,且改变后的单词要在单词表中出现。

解题思路

此题是参考了南郭子綦的思路。
采用了bfs的方式,每次改变单词中的一个字符,并判断生成的单词是否在wordlist中,直到生成目标单词,或者无法再继续下去。

代码

class Solution(object):    def ladderLength(self, beginWord, endWord, wordList):        """        :type beginWord: str        :type endWord: str        :type wordList: Set[str]        :rtype: int        """        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 wordList:                            q.append((nextWord,lens + 1))                            wordList.remove(nextWord)        return 0
0 0
原创粉丝点击