Advertisement
Guest User

Untitled

a guest
Apr 30th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.67 KB | None | 0 0
  1. public class Solution {
  2. Set<Character> visited = new HashSet<>();
  3. Set<Character> visiting = new HashSet<>();
  4. Set<Character> unmark = new HashSet<>();
  5. Set<Character> unvisit = new HashSet<>();
  6. String path = "";
  7. Map<Character, List<Character>> map = new HashMap<>();
  8. boolean shitvalue = false;
  9. public String alienOrder(String[] words) {
  10. if (words.length == 0) return "";
  11. if (words.length == 1) return words[0];
  12. int i = 0;
  13. char c = words[0].charAt(i);
  14. List<List<String>> buckets;
  15.  
  16.  
  17. do {
  18. buckets = new ArrayList<>();
  19. List<String> temp = new ArrayList<>();
  20. for (String word : words) {
  21. unmark.add(c);
  22. if (i >= word.length()) continue;
  23. if (word.charAt(i) != c) {
  24. c = word.charAt(i);
  25. buckets.add(temp);
  26. temp = new ArrayList<>();
  27. }
  28. temp.add(word);
  29. }
  30. if (temp.size() > 0) buckets.add(temp);
  31.  
  32. for (int j = 0; j < buckets.size(); j++) {
  33. if (j == 0) {
  34. if (buckets.get(0).size() == 0) continue;
  35. if (!map.containsKey(buckets.get(0))) map.put(buckets.get(0).get(0).charAt(i), new ArrayList<>());
  36. } else {
  37. if (!map.containsKey(buckets.get(j - 1))) {
  38. if (buckets.get(j - 1).size() == 0) continue;
  39. map.put(buckets.get(j - 1).get(0).charAt(i), new ArrayList<>());
  40. }
  41. map.get(buckets.get(j - 1).get(0).charAt(i)).add(buckets.get(j).get(0).charAt(i));
  42. }
  43. }
  44. i++;
  45. } while (buckets.size() > 0);
  46.  
  47.  
  48. while (unmark.size() > 0) {
  49.  
  50. char character = 's';
  51. for (char asdf : unmark) {
  52. character = asdf;
  53. break;
  54. }
  55. unmark.remove(character);
  56. visit(character);
  57.  
  58. }
  59. return shitvalue ? "" : path;
  60.  
  61. }
  62. public void visit(char c) {
  63. if (visiting.contains(c)) {
  64. shitvalue =true;
  65. return;
  66. }
  67. if (!visited.contains(c)) {
  68. if (unmark.contains(c)) unmark.remove(c);
  69. visiting.add(c);
  70. if (map.get(c) != null) {
  71. for (char adj : map.get(c)) {
  72. visit(adj);
  73. }
  74. }
  75. visited.add(c);
  76. visiting.remove(c);
  77. path = c + path;
  78. }
  79. }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement