版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/81504148
原题链接 Medium
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.
题解:两个字符串如果包含相同字母就算一组
算法
我的思路:
1 怎么判断同组?用sort如果两个字符串sort之后相同肯定是同组
2 同组怎么存在同个vector下?我使用了map<string,vector<string>>,key是sort之后的字符串,value是sort之前的字符串
3 最后遍历map 存一个二维vector返回(这里感觉我是不是做麻烦了,用了三个O(n)的遍历
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<string> strscp = strs;
vector<vector<string>> strsort;
map<string,vector<string>> mapstr;
map<string,vector<string>>::iterator it;
int len = strs.size();
int i;
for(i = 0;i < len; i++){
sort(strscp[i].begin(),strscp[i].end());
mapstr[strscp[i]].push_back(strs[i]);
}
for(it = mapstr.begin() ; it != mapstr.end(); it++){
strsort.push_back(it->second);
}
return strsort;
}
};