LeetCode 49. Group Anagrams

xiaoxiao2021-02-28  91

题目题意分析代码

题目

Given an array of strings, group anagrams together.

For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”], Return:

[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]

Note: All inputs will be in lower-case.


题意

给出一个数组,对这些字符进行分组。比如,给出数组["eat", "tea", "tan", "ate", "nat", "bat"],返回

[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]

注意: 所有的输入都是小写的形式。


分析

分组是把用相同的字符组成的字符串分到一组,我们可以建立一个字典,以字符串的组成为key,值为数组,把由相同的字符组成的字符串放进这个数组,以上面的输入为例,字典如下:

abt: bat aet: eat tea ate ant: tan nat

然后把这个字典转化为题目要求的数据格式即可。

代码

vector<vector<string>> groupAnagrams(vector<string>& strs) { map<string,vector<string>> dic; vector<vector<string>> result; for(int i=0;i<strs.size();i++){ string key = strs[i]; // sort key 从小到大 for(int j=0;j<key.size();j++){ for(int k=j+1;k<key.size();k++){ if(key[j]>key[k]) swap(key[j], key[k]); } } if(dic.find(key) == dic.end()){ vector<string> list; dic[key] = list; } dic[key].push_back(strs[i]); } // 输出map map<string,vector<string>>::iterator iter; for(iter = dic.begin(); iter != dic.end(); ++iter) { result.push_back(iter->second); } return result; }

100 / 100 test cases passed. Runtime: 45 ms

转载请注明原文地址: https://www.6miu.com/read-73245.html

最新回复(0)