RosettaCodeData/Task/Anagrams-Deranged-anagrams/Java/anagrams-deranged-anagrams.java

48 lines
1.5 KiB
Java
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
2013-04-10 14:58:50 -07:00
public class DerangedAnagrams {
2017-09-23 10:01:46 +02:00
public static void main(String[] args) throws IOException {
List<String> words = Files.readAllLines(new File("unixdict.txt").toPath());
printLongestDerangedAnagram(words);
2013-04-10 14:58:50 -07:00
}
2017-09-23 10:01:46 +02:00
private static void printLongestDerangedAnagram(List<String> words) {
words.sort(Comparator.comparingInt(String::length).reversed().thenComparing(String::toString));
2013-04-10 14:58:50 -07:00
Map<String, ArrayList<String>> map = new HashMap<>();
2017-09-23 10:01:46 +02:00
for (String word : words) {
char[] chars = word.toCharArray();
Arrays.sort(chars);
String key = String.valueOf(chars);
List<String> anagrams = map.computeIfAbsent(key, k -> new ArrayList<>());
for (String anagram : anagrams) {
if (isDeranged(word, anagram)) {
System.out.printf("%s %s%n", anagram, word);
return;
2013-04-10 14:58:50 -07:00
}
}
2017-09-23 10:01:46 +02:00
anagrams.add(word);
2013-04-10 14:58:50 -07:00
}
2017-09-23 10:01:46 +02:00
System.out.println("no result");
2013-04-10 14:58:50 -07:00
}
2017-09-23 10:01:46 +02:00
private static boolean isDeranged(String word1, String word2) {
for (int i = 0; i < word1.length(); i++) {
if (word1.charAt(i) == word2.charAt(i)) {
return false;
}
2013-04-10 14:58:50 -07:00
}
2017-09-23 10:01:46 +02:00
return true;
2013-04-10 14:58:50 -07:00
}
}