以下是Leetcode discussion上别人的Python代码
class Solution:
def ladderLength(self, beginWord, endWord, wordDict):
#front back初始化
front, back=set([beginWord]), set([endWord])
length=2
width=len(beginWord)
#charSet储存26个小写字母
charSet=list(string.lowercase)
#在wordDict删除起始和结束的单词
wordDict.discard(beginWord)
wordDict.discard(endWord)
#下面将进行广度优先搜索
while front:
newFront=set()
//循环遍历front里的每个单词
for phrase in front:
//下面一步是对每个位置的字母进行替换
//例如:start->stbrt a->b
for i in xrange(width):
for c in charSet:
nw=phrase[:i]+c+phrase[i+1:]
//如果替换后的数字刚好在back里面,满足条件
if nw in back:
return length
//如果替换后的字符在wordDict里面,将进放入队列进下下面的循环
if nw in wordDict:
newFront.add(nw)
front=newFront
//这一步是优化,发现front和back后其实结束条件一样
//因为不轮是从front连接back还是从back连接front都都一样
//但是wordDict的长度发生变化,减少遍历次数
if len(front)>len(back):
front,back=back,front
wordDict-=front
length+=1
return 0