int (start, end, words):
startn, endn = (start, end, words)
count = (startn, endn)
return count
// time O(n)
(startn, endn):
mind = null
q = new
q.push({startn, 0})
while !q.isempty():
n, d = q.dequeue()
if n == endn:
mind = d
break
if visited.has(n):
continue
visited.add(n)
for nn in n.neighbors:
q.enqueue({nn, d +1})
if mind != null:
mind +=2
return mind
node:
word
neighbors
// time O(n^2)
(s1, s2, words):
all = [words, s1, s2]
for word in all:
wordnodemap[word] = new node(word)
start = wordnodemap[s1]
end = wordnodemap[s2]
for word in all:
wordn = wordnodemap[word]
for other in all:
if word == other:
continue
if areladderwords(word, other):
othern = wordnodemap[other]
wordn.neighbors.add(othern)
return start, end
areladderwords(s1, s2):
count = 0
for c1, c2 in s1, s2:
if c1 != c2:
count++
if count > 1:
break
return count == 1
[Hat tip to A]
Monday, July 18, 2016
word ladder
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment