Skip to content

Commit bc0e12e

Browse files
solves alien language dictionary
1 parent 37f0909 commit bc0e12e

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@
258258
| 942 | [DI String Match](https://leetcode.com/problems/di-string-match) | [![Java](assets/java.png)](src/DIStringMatch.java) |
259259
| 944 | [Delete Columns to Make Sorted](https://leetcode.com/problems/delete-columns-to-make-sorted) | [![Java](assets/java.png)](src/DeleteColumnsToMakeSorted.java) |
260260
| 949 | [Largest Time for Given Digits](https://leetcode.com/problems/largest-time-for-given-digits) | |
261-
| 953 | [Verifying an Alien Dictionary](https://leetcode.com/problems/verifying-an-alien-dictionary) | |
261+
| 953 | [Verifying an Alien Dictionary](https://leetcode.com/problems/verifying-an-alien-dictionary) | [![Java](assets/java.png)](src/VerifyAnAlienDictionary.java) |
262262
| 961 | [N-Repeated Elements in Size 2N Array](https://leetcode.com/problems/n-repeated-element-in-size-2n-array) | |
263263
| 965 | [Univalued Binary Tree](https://leetcode.com/problems/univalued-binary-tree) | |
264264
| 970 | [Powerful Integers](https://leetcode.com/problems/powerful-integers) | |

src/VerifyAnAlienDictionary.java

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.util.Comparator;
2+
3+
public class VerifyAnAlienDictionary {
4+
public boolean isAlienSorted(String[] words, String order) {
5+
AlienLanguageComparator alienLanguageComparator = new AlienLanguageComparator(order);
6+
for (int i = 1 ; i < words.length ; i++) {
7+
if (alienLanguageComparator.compare(words[i - 1], words[i]) > 0) {
8+
return false;
9+
}
10+
}
11+
return true;
12+
}
13+
14+
private static class AlienLanguageComparator implements Comparator<String> {
15+
final int[] characterOrder = new int[26];
16+
17+
AlienLanguageComparator(String order) {
18+
for (int index = 0 ; index < 26 ; index++) {
19+
characterOrder[order.charAt(index) - 'a'] = index;
20+
}
21+
}
22+
23+
@Override
24+
public int compare(String s1, String s2) {
25+
if (s1.length() == s2.length() && s1.equals(s2)) return 0;
26+
for (int i = 0, j = 0 ; i < s1.length() && j < s2.length() ; i++, j++) {
27+
if (characterOrder[s1.charAt(i) - 'a'] < characterOrder[s2.charAt(j) - 'a']) return -1;
28+
else if (characterOrder[s1.charAt(i) - 'a'] > characterOrder[s2.charAt(j) - 'a']) return 1;
29+
}
30+
return s1.length() - s2.length();
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)