Untitled
unknown
plain_text
10 months ago
2.6 kB
14
Indexable
import java.util.*;
public class AlienDictionary {
public static String findOrder(String[] words) {
Map<Character, Set<Character>> graph = new HashMap<>();
Map<Character, Integer> inDegree = new HashMap<>();
for (String word : words) {
for (char c : word.toCharArray()) {
inDegree.putIfAbsent(c, 0);
graph.putIfAbsent(c, new HashSet<>());
}
}
for (int i = 0; i < words.length - 1; i++) {
String word1 = words[i];
String word2 = words[i + 1];
int minLength = Math.min(word1.length(), word2.length());
for (int j = 0; j < minLength; j++) {
char c1 = word1.charAt(j);
char c2 = word2.charAt(j);
if (c1 != c2) {
if (!graph.get(c1).contains(c2)) {
graph.get(c1).add(c2);
inDegree.put(c2, inDegree.get(c2) + 1);
}
break;
}
}
}
Queue<Character> queue = new LinkedList<>();
StringBuilder result = new StringBuilder();
for (char c : inDegree.keySet()) {
if (inDegree.get(c) == 0) {
queue.offer(c);
}
}
while (!queue.isEmpty()) {
char current = queue.poll();
result.append(current);
for (char neighbor : graph.get(current)) {
inDegree.put(neighbor, inDegree.get(neighbor) - 1);
if (inDegree.get(neighbor) == 0) {
queue.offer(neighbor);
}
}
}
if (result.length() != inDegree.size()) {
return "";
}
return result.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter number of words: ");
int n = sc.nextInt();
sc.nextLine();
String[] words = new String[n];
System.out.println("Enter the words:");
for (int i = 0; i < n; i++) {
words[i] = sc.nextLine().trim();
}
String order = findOrder(words);
if (order.isEmpty()) {
System.out.println("Invalid dictionary order (cycle detected).");
} else {
System.out.println("Alien dictionary order: " + order);
}
sc.close();
}
}Editor is loading...
Leave a Comment