2015年1月4日星期日

Word Ladder

Word Ladder -- LeetCode

public int ladderLength(String start, String end, HashSet dict) {
    if(start==null || end==null || start.length()==0 || end.length()==0 || start.length()!=end.length())
        return 0;
    LinkedList queue = new LinkedList();
    HashSet visited = new HashSet();
    int level= 1;
    int lastNum = 1; // 当前level还需要check的节点
    int curNum = 0; // next level 需要check的节点
    queue.offer(start);
    visited.add(start);

    while(!queue.isEmpty())
    {
        String cur = queue.poll(); //从queue拿出一个进行visit
        lastNum--;
        for(int i=0;i<cur.length();i++)
        {
            char[] charCur = cur.toCharArray();
            for(char c='a';c<='z';c++)
            {
                charCur[i] = c;
                String temp = new String(charCur);
                if(temp.equals(end))
                    return level+1;
                if(dict.contains(temp) && !visited.contains(temp))
                {
                    curNum++;//新的未visit的节点,
                    queue.offer(temp); // 加到下次check的行列
                    visited.add(temp); //标记为visited
                }
            }
        }
       //当前level已经check完成,进行下一个level
        if(lastNum==0)
        {
            lastNum = curNum;
            curNum = 0;
            level++;
        }
    }
    return 0;
}

没有评论:

发表评论