49. 字母异位词分组

题目链接:

https://leetcode-cn.com/problems/group-anagrams/

 

方法一:

创建map,其中key为字符串的字母,value为相同字母组合的字符串列表。

遍历strs,存入map中。最后再遍历map转换成vector形式。

1.	class Solution {  
2.	public:  
3.	    vector<vector<string>> groupAnagrams(vector<string>& strs) {  
4.	        map<string, vector<string>> ret;  
5.	          
6.	        for (auto& str: strs) {  
7.	            string index = str;  
8.	            sort(index.begin(), index.end());  
9.	            ret[index].push_back(str);  
10.	        }  
11.	          
12.	        vector<vector<string>> ans;  
13.	        for (auto iter = ret.begin(); iter != ret.end(); ++iter) {  
14.	            ans.push_back(iter->second);  
15.	        }  
16.	        return ans;  
17.	    }  
18.	};  

方法二:

优化方法一的做法,减少map到vector的转换。

Map的key值还是字符串的字母,value变成了应存入vector中位置的下表。

这样可以直接根据value存入对应的vector中,减少了一次拷贝操作。

1.	class Solution {  
2.	public:  
3.	    vector<vector<string>> groupAnagrams(vector<string>& strs) {  
4.	        unordered_map<string, int> ret;  
5.	        vector<vector<string>> ans;  
6.	          
7.	        for (auto& str: strs) {  
8.	            string index = str;  
9.	            sort(index.begin(), index.end());  
10.	            auto iter = ret.find(index);  
11.	            if (iter == ret.end()) {  
12.	                ret[index] = ans.size();      
13.	                ans.push_back(vector<string>{str});      
14.	            } else {  
15.	                ans[iter->second].push_back(str);  
16.	            }   
17.	        }  
18.	          
19.	        return ans;  
20.	    }  
21.	};  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值