word ladder这道题是我2月份准备面试时候非常怕碰到的考题。
因为要求的output是最短transformation。所以,可以理解为求从A--B的最短距离,使用BFS。
Example的 tree的形状:
但是我做这道题时候的一个非常错误的点在于,我把这个想的还是简单了一点。。。。
我用了一个int level, 来记录从Root到终点的路程:也就是经过了几个level。 然后用了一个priority-Queue, 把节点放进去。 比如说:hit, hot, lot, dot, log, dog,...
但是这么做的问题是当我一个一个pop出来的时候,我不知道我自己在第几个level。
比如说lot pop出来的时候 它以为自己是level3, 但是dot 下一个pop出来他也许会以为自己是level 4 因为我们刚刚给lot pop 出来以后马上加了一个level。这样就会导致我们实际会多count 路程。但是这个问题我是不知道有什么简单的解决方案。。
正确的姿势应该是用一个hashSet把一层的node放进去。 然后进入下一层的时候, 让cur_set=hashset,然后一个一个process里面的node,加入到新的hashset。
Edit on 8月13号:
今天看basketwang, 对这题的理解上升到了一个前所未有的高度。
我们可以一开始用一个先构建一个Graph一样的map。每个node的neighbor放到map
然后BFS从第一个start word开始遍历它的neighbor. 注意的是要用一个set来记录去过哪里了别走回头路!
我自己做了一遍卡在了BFS中如何判斷當前在哪個level
發現這個太酷了!用queue的size作為for limit.
这个是我目前为止写的最酷的一次!