49.字母异位词分组

反思:

1.  c++ vector为空,size() - 1后溢出,注意排坑,vector.size()返回的是无符号整数,需要将它转换为int。

2.string是一个类,有自己的函数!!!,string.size() 和 string.length()无区别。

3.map.count(key)//返回的只有0和一

map.find(key)//返回的是迭代器。
 

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 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] 仅包含小写字母

起初想使用map<String,int>,发现 vector<vector<string>>里面是空的,不能直接a[i].push_back()

改成vector<string>后可直接从map->second导入容器中。

		
class Solution {
	public:
	vector<vector<string>>a;
		unordered_map<string,vector<string>>c;
		vector<vector<string>> groupAnagrams(vector<string>& strs) {
			for(string &str:strs){
                string b=str;
                sort(b.begin(),b.end());
                c[b].emplace_back(str);
            }
            for(auto it=c.begin();it!=c.end();it++){
                a.emplace_back(it->second);
            }
            return a;
            }
		};

时间复杂度:O(nklogk),其中 n是strs 中的字符串的数量,k是 strs 中的字符串的的最大长度。需要遍历 n 个字符串,对于每个字符串,需要 O(klogk) 的时间进行排序以及 O(1) 的时间更新哈希表,因此总时间复杂度是 O(nklogk)。

空间复杂度:O(nk),其中 n 是 strs 中的字符串的数量,k 是 strs 中的字符串的的最大长度。需要用哈希表存储全部字符串。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/group-anagrams
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值