码迷,mamicode.com
首页 > 其他好文 > 详细

127. Word Ladder

时间:2016-05-22 10:52:19      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 127. Word Ladder
     * 2016-5-21 by Mingyang
     * 这道题目就是典型的把题目转换为graph的题目,首先我们从一个string start出发
     * 我们先给题目进行图的映射,顶点则是每个字符串,然后两个字符串如果相差一个字符则我们进行连边。
     * 接下来看看这个方法的优势,注意到我们的字符集只有小写字母,而且字符串长度固定,
     * 假设是L。那么可以注意到每一个字符可以对应的边则有25个(26个小写字母减去自己),
     * 那么一个字符串可能存在的边是25*L条。接下来就是检测这些边对应的字符串是否在字典里,就可以得到一个完整的图的结构了。
     * 关键1.就像我们以前做Tree的时候用queue来做,这样的话把所有的子节点全部push到queue里面去,同时每一行都精确到本行的数有多少个
     * 好控制什么时候进入到下一行。
     */
    public int ladderLength(String start, String end, Set<String> dict) {
        if (start == null || end == null || start.length() == 0
                || end.length() == 0 || start.length() != end.length())
            return 0;
        LinkedList<String> queue = new LinkedList<String>();
        Set<String> visited = new HashSet<String>();
        int level = 1;
        int lastNum = 1;
        int curNum = 0;
        queue.offer(start);
        visited.add(start);
        while (!queue.isEmpty()) {
            String cur = queue.poll();
            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++;
                        queue.offer(temp);
                        visited.add(temp);
                    }
                }
            }
            if (lastNum == 0) {
                lastNum = curNum;
                curNum = 0;
                level++;
            }
        }
        return 0;
    }

 

127. Word Ladder

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5516174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!