给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
map<multiset<char>,int> temp;
int nums = 0;
for(int i=0;i<strs.size();i++)
{
multiset<char> mp;
for(int j=0;j<strs[i].size();j++)
mp.insert(static_cast<char>(strs[i][j]));
if(temp.find(mp) == temp.end())
{
temp.insert({mp,nums});
res.push_back(vector<string>());
res[nums++].push_back(strs[i]);
}
else
res[temp.find(mp)->second].push_back(strs[i]);
}
return res;
}
};
思路:定义一个map和multiset,用multiset读入每一个字符串,看是否存在与map中,若不存在,则在res中插入一个空vector<string>
容器,再将对应字符串放入该新建vector容器中;若存在则放入对应的vector容器中.