# 49_Group_Anagrams ###### tags: `leetcode` ## Problem Statement Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once. - Example 1: > Input: strs = ["eat","tea","tan","ate","nat","bat"] > Output: [["bat"],["nat","tan"],["ate","eat","tea"]] - Example 2: > Input: strs = [""] > Output: [[""]] - Example 3: > Input: strs = ["a"] > Output: [["a"]] - Constraints: > $$1 <= strs.length <= 10^4$$ > $$0 <= strs[i].length <= 100$$ > strs[i] consists of lower-case English letters. ## Solution - the original declaration is like below, the answer, and the cnt map. ```cpp= unordered_map<string, vector<string>> anagrams; vector<vector<string>> result; ``` - To begin with, the problem is to calculate the frequencies of occurance in each string, and shift its appearance into ordered string. ```cpp= for(auto str : strs) { int charset[26] = {0}; string charstr = ""; for(auto c : str) charset[c - 'a']++; for(auto v : charset) charstr += '#' + char(v); anagrams[charstr].push_back(str); } ``` - Then add the original array part into the result. ```cpp= for(auto it : anagrams) result.push_back(it.second); return result; ```