Leetcode 49. Group Anagrams (python+cpp)

题目

Leetcode 49. Group Anagrams (python+cpp)_第1张图片

解法1:字符串排序

对每个字符串排序,anagram会有相同的排序结果,所以可以用排序后的字符串作为hashmap的key
python版本:
对于python版本,字符串不能直接call sort函数,必须要用sorted返回一个list,而且list不能作为字典的key,而必须转换成tuple

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = collections.defaultdict(list)
        ans = []
        for w in strs:
            tmp = w
            tmp = sorted(tmp)
            dic[tuple(tmp)].append(w)
        
        for v in dic.values():
            ans.append(v)
        
        return ans

C++版本
C++中的字符串可以直接用sort函数,并且sort完也是字符串,直接可以作为hashmap的key

class Solution {
     
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
     
        vector<vector<string>> ans;
        unordered_map<string,vector<string>> seen;
        for(auto str : strs){
     
            string tmp = str;
            sort(tmp.begin(),tmp.end());
            seen[tmp].push_back(str);
        }
        for(auto item : seen){
     
            ans.push_back(item.second);
        }
        return ans;
    }
};

解法2:统计字符出现次数

按照anagram的定义进行统计字符出现次数,以这个字数作为key
python版本:

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dic = collections.defaultdict(list)
        for w in strs:
            count = [0]*26
            for c in w:
                count[ord(c) - ord('a')] += 1;
            dic[tuple(count)].append(w)
        
        return dic.values()

C++这边没有想到可以怎么写,因为python可以用tuple作为key,但是C++貌似没有类似的方法来转换。比如vector是不可以作为unordered_map的key的

你可能感兴趣的:(Leetcode,字符串,字符串,python,leetcode,C++)