一、题目
1、题目描述
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [“”]
输出: [[“”]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/group-anagrams/
二、解题报告
1、思路分析
(
1
)
(1)
(1)遍历数组,将元素排序后作为map容器的key,vector作为map容器的value。
(
2
)
(2)
(2)遇到key相同的,就放入value数组中。
(
3
)
(3)
(3)遍历结束后,从map容器中取出vector数组放入结果集。
2、时间复杂度
时间复杂度为O(n),空间复杂度为O(n)
3、代码详解
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> re;
map<string, vector<string>>mp;
for(int i=0;i<strs.size();i++){
string index = strs[i];
sort(index.begin(), index.end());
if (mp.find(index) == mp.end()) {
vector<string> tmp;
tmp.push_back(strs[i]);
mp[index] = tmp;
} else {
mp[index].push_back(strs[i]);
}
}
for (map<string, vector<string>>:: iterator it = mp.begin(); it != mp.end(); it++) {
re.push_back(it->second);
}
return re;
}
};
三、本题小知识
1.C++中map容器的使用:
加入元素:map[key] = value
查找key是否存在:map.find(key) == map.end()
遍历map:采用迭代器map<T1,T2> ::iterator it = map.begin(); it != map.end(); it++
迭代器中取数据:it->first it->second