Word Ladder
Description:
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
Example
Given:
start = “hit”
end = “cog”
dict = [“hot”,”dot”,”dog”,”lot”,”log”]
As one shortest transformation is “hit” -> “hot” -> “dot” -> “dog” -> “cog”,
return its length 5.
Notice
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
Code:
超时
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):
# write your code here
dict = list(dict)
cur = [start]
def compare(word1, word2):
if word2==None:
return False
cnt = 0
for i in range(len(word1)):
if word1[i]!=word2[i]:
cnt += 1
if cnt==1:
return True
else:
return False
def bfs():
res = 1
while True:
if res>len(dict)+2:
return res
for i in range(len(cur)):
if compare(cur[i], end):
return res+1
tmp = []
for i in range(len(cur)):
for j in range(len(dict)):
if compare(cur[i], dict[j]):
tmp.append(dict[j])
dict[j] = None
cur[:] = tmp[:]
res += 1
return bfs()