标签:leetcode
https://oj.leetcode.com/problems/word-ladder-ii/
http://blog.csdn.net/linhuanmars/article/details/23071455
public class Solution { public List<List<String>> findLadders(String start, String end, Set<String> dict) { List<List<String>> toReturn = new ArrayList<>(); Queue<Node> queue = new LinkedList<>(); queue.offer(new Node(start, new ArrayList<String>())); int minlen = -1; Set<String> visited = new HashSet<>(); visited.add(start); while (!queue.isEmpty()) { Node node = queue.poll(); if (node.str.equals(end)) { if (minlen == -1) { toReturn.add(node.path); minlen = node.path.size(); } else if (node.path.size() == minlen) { toReturn.add(node.path); } } else { visited.add(node.str); List<Node> nextnodes = next(node, dict, visited); for (Node nextnode : nextnodes) queue.offer(nextnode); } } return toReturn; } private List<Node> next(Node from, Set<String> dict, Set<String> visited) { List<Node> toReturn = new ArrayList<>(); char[] chars = from.str.toCharArray(); for (int i = 0 ; i < chars.length ; i ++) { char oric = chars[i]; for (char c = ‘a‘ ; c <= ‘z‘ ; c ++) { if (c == oric) continue; chars[i] = c; String str = new String(chars); if (dict.contains(str) && !visited.contains(str)) { toReturn.add(new Node(str, from.path)); } } chars[i] = oric; } return toReturn; } private static class Node { String str; List<String> path; Node(String str, List<String> oldpath) { this.str = str; path = new ArrayList<>(oldpath); path.add(str); } } }
标签:leetcode
原文地址:http://7371901.blog.51cto.com/7361901/1600315