, помещая это в «реальный» контекст программирования java (т.мы используем некоторые существующие и базовые классы jdk util, я думаю, что следующий подход может дать еще один интересный аспект этой теме (например, «как отсортировать массив строк с анаграммами рядом друг с другом»):
(a) we определить компаратор, чтобы определить, являются ли две строки анаграммами; (b) мы используем массив Arrays.sort (массив, компаратор) для сортировки массива;
ниже код и результат (идею можно увидеть в главе 9, «взломав интервью кодирования» по Гейл Laakmann, например)
импорта java.util.Arrays; импорт java.util.Comparator;
SolutionForSortArraysByAnagrams общественного класса {
public static void main(String[] args){
String[] strArray = new String[]{"abets","mates","baste","meats", "betas","beast", "steam", "tames", "beats", "teams"};
sortArraysByAnagrams(strArray);
for(String str : strArray){
System.out.println(str);
}
}
private static void sortArraysByAnagrams(String[] strArray) {
Arrays.sort(strArray, new AnagramComparator());
}
}
класс AnagramComparator реализует компаратор {
@Override
public int compare(String s1, String s2) {
//check edge conditions and length
if(s1 == null || s2 == null)
return -1;
if(s1.length() < s2.length())
return -1;
else if (s1.length() > s2.length())
return 1;
//sort s1 and s2 to compare:
//System.out.println(s1 + " vs " + s2);
return sort(s1).compareTo(sort(s2));
}
private String sort(String s1) {
char[] cArray = s1.toCharArray();
Arrays.sort(cArray);
//System.out.println(" sorted: " + new String(cArray));
return new String(cArray);
}
}
вход: { "подстрекает", "товарищей", "Baště «мясо», «бета», «зверь», «пар», «приручение», «бьет», «команды»};
выход: подстрекает Колотите беты животное бьет помощников мяса пара приручает команды
Я думаю, уплотняя слово путем подсчета числа каждых гольцов достаточно для вычисления ключа карты. –
@ liuml07 Не могли бы вы подробнее рассказать? – Hengameh
@Hengameh давайте сделаем это с примером: aabbcc, у вас будет a2b2c2 в качестве ключа (в этом случае abcabc имеет a2b2c2, поэтому они являются анаграммой друг друга). – taocp