1
1
class Solution {
2
2
public String alienOrder (String [] words ) {
3
- Map <Character , List <Character >> adjList = new HashMap <>();
4
- Map <Character , Integer > inorderMap = new HashMap <>();
3
+ if (words == null || words .length == 0 ) {
4
+ return "" ;
5
+ }
6
+
7
+ Map <Character , List <Character >> graph = new HashMap <>();
8
+ Map <Character , Integer > inorder = new HashMap <>();
5
9
6
- for (String word : words ) {
7
- for (char c : word .toCharArray ()) {
8
- adjList .putIfAbsent (c , new ArrayList <>());
9
- inorderMap .putIfAbsent (c , 0 );
10
+ for (String w : words ) {
11
+ for (char c : w .toCharArray ()) {
12
+ graph .putIfAbsent (c , new ArrayList <>());
13
+ inorder .putIfAbsent (c , 0 );
10
14
}
11
15
}
12
16
13
17
for (int i = 0 ; i < words .length - 1 ; i ++) {
14
- String word1 = words [i ];
15
- String word2 = words [i + 1 ];
18
+ String word1 = words [i ], word2 = words [i + 1 ];
16
19
17
20
if (word1 .length () > word2 .length () && word1 .startsWith (word2 )) {
18
21
return "" ;
19
22
}
20
23
21
24
for (int j = 0 ; j < Math .min (word1 .length (), word2 .length ()); j ++) {
22
- if (word1 .charAt (j ) != word2 .charAt (j )) {
23
- adjList .get (word1 .charAt (j )).add (word2 .charAt (j ));
24
- inorderMap .put (word2 .charAt (j ), inorderMap .get (word2 .charAt (j )) + 1 );
25
+ char c1 = word1 .charAt (j ), c2 = word2 .charAt (j );
26
+
27
+ if (c1 != c2 ) {
28
+ graph .get (c1 ).add (c2 );
29
+ inorder .put (c2 , inorder .get (c2 ) + 1 );
25
30
break ;
26
31
}
27
32
}
@@ -30,8 +35,8 @@ public String alienOrder(String[] words) {
30
35
Queue <Character > q = new LinkedList <>();
31
36
StringBuilder sb = new StringBuilder ();
32
37
33
- for (char c : inorderMap .keySet ()) {
34
- if (inorderMap .get (c ) == 0 ) {
38
+ for (Character c : inorder .keySet ()) {
39
+ if (inorder .get (c ) == 0 ) {
35
40
q .offer (c );
36
41
}
37
42
}
@@ -40,17 +45,19 @@ public String alienOrder(String[] words) {
40
45
char c = q .poll ();
41
46
sb .append (c );
42
47
43
- for (char neighbour : adjList .get (c )) {
44
- inorderMap .put (neighbour , inorderMap .get (neighbour ) - 1 );
45
- if (inorderMap .get (neighbour ) == 0 ) {
48
+ for (char neighbour : graph .get (c )) {
49
+ inorder .put (neighbour , inorder .get (neighbour ) - 1 );
50
+
51
+ if (inorder .get (neighbour ) == 0 ) {
46
52
q .offer (neighbour );
47
53
}
48
54
}
49
55
}
50
56
51
- if (sb .length () < inorderMap .size ()) {
57
+ if (sb .length () < inorder .size ()) {
52
58
return "" ;
53
59
}
60
+ ;
54
61
return sb .toString ();
55
62
}
56
63
}
0 commit comments