Вы сортируете символы в каждом слове в алфавитном порядке, чтобы сформировать ключ в карте, значения которой являются списками слов для этого ключа.
Когда вам дается слово для поиска анаграмм, вы сортируете символы в этом слове по алфавиту и выполняете поиск на карте.
Из вашего примера и добавляя слово БАССЕЙН, вы получите:
LOOP -> [LOOP, POOL, POLO]
OPST -> [STOP, POST]
код Java будет что-то вроде:
public class AnagramGenerator
{
private Map<String, Collection<String>> indexedDictionary;
public AnagramGenerator(List<String> dictionary)
{
this.indexedDictionary = index(dictionary);
}
public Collection<String> getAnagrams(String word)
{
return indexedDictionary.get(sort(word));
}
private Map<String, Collection<String>> index(List<String> dictionary)
{
MultiMap<String, String> indexedDictionary = HashMultimap.create();
for (String word : dictionary)
{
indexDictionary.put(sort(word), word);
}
return indexedDictionary.asMap();
}
private String sort(String word)
{
List<Character> sortedCharacters= Arrays.asList(word.toCharArray());
Collections.sort(sortedCharacters);
StringBuilder builder = new StringBuilder();
for (Character character : sortedCharacters)
{
builder.append(character);
}
return builder.toString();
}
}
@Bathsheba как бы это помощь? –