• 127. Word Ladder


        /*
         * 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;
        }
  • 相关阅读:
    详解Python模块导入方法
    第15天上课例子,sqllchemy运用
    【Demo 0075】获取系统进程列表
    【Demo 0076】获取进程中模块列表
    【Demo 0071】托盘小工具
    【Demo 0070】读取EXE\DLL中ICON
    【Demo 0073】复合文件拼拆
    【Demo 0072】启动外部应用程序
    【Demo 0078】获取系统版本信息
    【Demo 0079】进程继承关系
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5516174.html
Copyright © 2020-2023  润新知