今天的重难点依旧是STL的使用
发现自己关于STL的使用欠缺的非常多。
熟练的使用STL的话很容易可以减少自己的代码量的
49. 字母异位词分组
(1)题目描述
49. 字母异位词分组https://leetcode.cn/problems/group-anagrams/description/
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
仅包含小写字母
做题分析:
用自己的话解释题意:
将给定的字符串数组分类归纳,由相同字母组成的字符串归为一组(这一组均为相同字符但不同顺序的字符串)
开始思考解决方法:
题意还是较为容易理解的
我们先把这道题分为以下几步:
1、分类:先把属于一组的放在一起
2、将其值记录并且放入答案数组之中
那么针对于解法步骤:
我们可以针对于每一个字符串
我们把他们里面的字母排序一下
然后以这些字母排序后的样子作为下标
这个时候我们就可以
用map进行记录
map哈希表的键为一组字母异位词的标志(下标)
哈希表的值为一组字母异位词列表
最后赋值即可。
代码如下:
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
map<string,vector<string>> mp;
vector<vector<string>>ans;
string st;
for(int i=0;i<strs.size();++i){
st=strs[i];
sort(st.begin(),st.end());
mp[st].emplace_back(strs[i]);
}
for(auto i=mp.begin();i!=mp.end();++i){
ans.emplace_back(i->second);
}
return ans;
}
};
二、总结及计划
STL!!!