如何对文本文件进行排序以查找O(MN)时间复杂度的字谜,其中M是最大字符数,N是单词数?

时间:2018-08-03 07:52:31

标签: python sorting radix-sort counting-sort

嗨,我是Python的新手,我想在线性时间内在文件中找到几组字谜。字谜基本上是两个或多个单词,由相同的字母组成,但排列不同。

首先,我将所有单词读入列表。显然,我可以使用基数排序按列对每个单词进行排序,并且基数排序应使用稳定的计数排序。但是我不确切知道我的计数排序应该怎么做?我是否应该编写一个包含单词并按字母顺序对其进行排序的计数排序功能?然后以基数排序吗?

有人可以给我一个更清晰的思路来解决这个问题吗?感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

希望这可以帮助您理解我的方法。也是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;
}