Alien Dictionary
import java.util.*;
public class AlienDictionary {
public static ArrayList<Integer>[] Create(String words[], int n, int k, int inorder[]) {
ArrayList<Integer> graph[] = new ArrayList[k];
for (int i = 0; i < k; i++) {
graph[i] = new ArrayList<>();
}
for (int i = 0; i < n - 1; i++) {
String word1 = words[i];
String word2 = words[i + 1];
int minlen = Math.min(word1.length(), word2.length());
for (int j = 0; j < minlen; j++) {
if (word1.charAt(j) != word2.charAt(j)) {
int u = word1.charAt(j) - 'a';
int v = word2.charAt(j) - 'a';
graph[u].add(v);
inorder[v]++;
break;
}
}
}
return graph;
}
public static boolean findOrder(ArrayList<Integer> graph[], int inorder[], int k) {
Queue<Integer> q = new LinkedList<>();
StringBuilder result = new StringBuilder();
for (int i = 0; i < k; i++) {
if (inorder[i] == 0) {
q.add(i);
}
}
while (!q.isEmpty()) {
int u = q.remove();
result.append((char) (u + 'a'));
for (int v : graph[u]) {
inorder[v]--;
if (inorder[v] == 0) {
q.add(v);
}
}
}
if (result.length() == k) {
String ans = result.toString();
System.out.println(ans);
return true;
}
return false;
}
public static void main(String[] args) {
String dist[] = { "baa", "abcd", "abca", "cab", "cad" };
int n = dist.length;
int k = 4;
int inorder[] = new int[k];
ArrayList<Integer> graph[] = new ArrayList[k];
graph = Create(dist, n, k, inorder);
if (findOrder(graph, inorder, k)) {
System.out.println("1");
}
if (!findOrder(graph, inorder, k)) {
System.out.println("0");
}
}
}
Comments
Post a Comment