Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
就是给一堆字符串,然后将其中组成字符串的字符集相同的字符,进行分组。
其实是map的应用
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs)
{
vector<vector<string> > ret;
map<string,vector<string> > record;
for ( int i = 0; i < strs.size() ; i++ )
{
string str = strs[i];
string original_str = str;
sort(original_str.begin(),original_str.end());
(record[original_str]).push_back(str);
}
for ( map<string,vector<string> >::iterator iter = record.begin(); iter != record.end() ; iter++ )
{
vector<string> item((*iter).second.begin(),(*iter).second.end());
ret.push_back(item);
}
return ret;
}
};
这里比较难想到的点是
string str = strs[i];
string original_str = str;
sort(original_str.begin(),original_str.end());
(record[original_str]).push_back(str);
因为其实排序后,就不用很麻烦地用数组,来比对字符串间数据集。