Как отсортировать текстовый файл, чтобы найти анаграммы за O(MN) сложности времени, где M - максимальное количество символов, а N - количество слов?

Привет, я новичок в Python и хочу найти группы анаграмм в файле за линейное время. Анаграммы - это, в основном, два или более слов, которые состоят из одного и того же алфавита, но в разных расположениях.

Сначала я прочитал все слова в список. По-видимому, я могу использовать сортировку по основанию для сортировки каждого слова по столбцу, а сортировка по основанию должна использовать сортировку со стабильным счетом. Но я не знаю точно, что должен делать мой подсчет? Должен ли я написать функцию сортировки подсчета, которая берет слово и сортирует его по алфавиту? Тогда назовите это в виде сортировки?

Может кто-нибудь дать мне более четкое представление о том, как подойти к этой проблеме? Любая помощь будет оценена спасибо!

0 ответов

Hope this helps you get my approach. It too is in O(mn)

public List<List<String>> groupAnagrams(String[] strs){
    List<List<String>> result = new ArrayList<List<String>>();

    HashMap<ArrayList<Integer>, ArrayList<String>> map = new HashMap<ArrayList<Integer>, HashMap<ArrayList<String>>;

    for(String str : strs){
        ArrayList<Integer> arr = new ArrayList<Integer>();
        for(int i=0; i<str.length(); i++){
            arr[str.charAt(i)- 'a']++;
        }

        if(map.containsKey(arr)){
            map.get(arr).add(str);
        } else {
            ArrayList<String> al = new ArrayList<String>();
            al.add(str);
            map.put(arr, al);
        }
    }

    result.addAll(map.values());

    return result;
}
Другие вопросы по тегам