标签:
1 public class Solution { 2 public String alienOrder(String[] words) { 3 if (words.length == 0) { 4 return ""; 5 } 6 StringBuilder result = new StringBuilder(); 7 Map<Character, Integer> degrees = new HashMap<>(); 8 Map<Character, Set<Character>> letters = new HashMap<>(); 9 10 for (String word : words) { 11 for (char c : word.toCharArray()) { 12 degrees.put(c, 0); 13 } 14 } 15 16 for (int i = 0; i < words.length - 1; i++) { 17 for (int j = 0; j < Math.min(words[i].length(), words[i+1].length()); j++) { 18 char c1 = words[i].charAt(j); 19 char c2 = words[i+1].charAt(j); 20 21 if (c1 != c2) { 22 if (!letters.containsKey(c1)) { 23 letters.put(c1, new HashSet<>()); 24 } 25 Set<Character> set = letters.get(c1); 26 if (!set.contains(c2)) { 27 set.add(c2); 28 letters.put(c1, set); 29 degrees.put(c2, degrees.get(c2) + 1); 30 } 31 break; 32 } 33 } 34 } 35 36 Queue<Character> queue = new LinkedList<>(); 37 for (char c : degrees.keySet()) { 38 if (degrees.get(c) == 0) { 39 queue.offer(c); 40 } 41 } 42 43 while (!queue.isEmpty()) { 44 char c = queue.poll(); 45 result.append(c); 46 if (letters.containsKey(c)) { 47 for (char cSub : letters.get(c)) { 48 degrees.put(cSub, degrees.get(cSub) - 1); 49 if (degrees.get(cSub) == 0) { 50 queue.offer(cSub); 51 } 52 } 53 } 54 } 55 56 return result.length() == degrees.size() ? result.toString() : ""; 57 } 58 }
标签:
原文地址:http://www.cnblogs.com/shuashuashua/p/5746028.html