Word Ladder

以下是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值