Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Solution {
- Set<Character> visited = new HashSet<>();
- Set<Character> visiting = new HashSet<>();
- Set<Character> unmark = new HashSet<>();
- Set<Character> unvisit = new HashSet<>();
- String path = "";
- Map<Character, List<Character>> map = new HashMap<>();
- boolean shitvalue = false;
- public String alienOrder(String[] words) {
- if (words.length == 0) return "";
- if (words.length == 1) return words[0];
- int i = 0;
- char c = words[0].charAt(i);
- List<List<String>> buckets;
- do {
- buckets = new ArrayList<>();
- List<String> temp = new ArrayList<>();
- for (String word : words) {
- unmark.add(c);
- if (i >= word.length()) continue;
- if (word.charAt(i) != c) {
- c = word.charAt(i);
- buckets.add(temp);
- temp = new ArrayList<>();
- }
- temp.add(word);
- }
- if (temp.size() > 0) buckets.add(temp);
- for (int j = 0; j < buckets.size(); j++) {
- if (j == 0) {
- if (buckets.get(0).size() == 0) continue;
- if (!map.containsKey(buckets.get(0))) map.put(buckets.get(0).get(0).charAt(i), new ArrayList<>());
- } else {
- if (!map.containsKey(buckets.get(j - 1))) {
- if (buckets.get(j - 1).size() == 0) continue;
- map.put(buckets.get(j - 1).get(0).charAt(i), new ArrayList<>());
- }
- map.get(buckets.get(j - 1).get(0).charAt(i)).add(buckets.get(j).get(0).charAt(i));
- }
- }
- i++;
- } while (buckets.size() > 0);
- while (unmark.size() > 0) {
- char character = 's';
- for (char asdf : unmark) {
- character = asdf;
- break;
- }
- unmark.remove(character);
- visit(character);
- }
- return shitvalue ? "" : path;
- }
- public void visit(char c) {
- if (visiting.contains(c)) {
- shitvalue =true;
- return;
- }
- if (!visited.contains(c)) {
- if (unmark.contains(c)) unmark.remove(c);
- visiting.add(c);
- if (map.get(c) != null) {
- for (char adj : map.get(c)) {
- visit(adj);
- }
- }
- visited.add(c);
- visiting.remove(c);
- path = c + path;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement