Leetcode: word ladder*

word ladder这道题是我2月份准备面试时候非常怕碰到的考题。

Leetcode: word ladder*_第1张图片

因为要求的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 路程。但是这个问题我是不知道有什么简单的解决方案。。


Leetcode: word ladder*_第2张图片


正确的姿势应该是用一个hashSet把一层的node放进去。 然后进入下一层的时候, 让cur_set=hashset,然后一个一个process里面的node,加入到新的hashset。



Edit on 8月13号:

今天看basketwang, 对这题的理解上升到了一个前所未有的高度。


我们可以一开始用一个先构建一个Graph一样的map。每个node的neighbor放到map  Neighbor的判断就是判断有没有办法通过改变当前String的一个character得到一个String 在directory List 里。

然后BFS从第一个start word开始遍历它的neighbor. 注意的是要用一个set来记录去过哪里了别走回头路!




Leetcode: word ladder*_第3张图片


Leetcode: word ladder*_第4张图片



我自己做了一遍卡在了BFS中如何判斷當前在哪個level

發現這個太酷了!用queue的size作為for limit.


这个是我目前为止写的最酷的一次!

Leetcode: word ladder*_第5张图片


Leetcode: word ladder*_第6张图片

你可能感兴趣的:(Leetcode: word ladder*)