All words contain only lowercase alphabetic characters.
这题是用的breadth first search 把每个字母当成一个edge 用一个que 把每次得到的新的edge加进来 在dict里面把已经遍历过的节点删除了。
每过一个新的单词的复杂度为L×26 L 是单词的长度
代码如下:
class Solution: # @param start, a string # @param end, a string # @param dict, a set of string # @return an integer def ladderLength(self, start, end, dict): dict.add(end) q=[] q.append((start,1)) while q: curr=q.pop(0) curword=curr[0] curlen=curr[1] if curword==end: return curlen for i in range(len(curword)): part1=curword[:i] part2=curword[i+1:] for j in 'qwertyuiopasdfghjklzxcvbnm': if curword[i]!=j: nextword=part1+j+part2 if nextword in dict: q.append((nextword,curlen+1)) dict.remove(nextword) return 0