首页 > 其他 > 详细

leetcode 49.字母异位词分组

时间:2020-03-25 21:12:07      阅读:64      评论:0      收藏:0      [点我收藏+]
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
 
思路:
  法1:对每个单词都进行排序,排序相同的放在同一个vector容器中,“键”为排序好的字符串,“值”为vector容器。
  法2:对每个单词,用个矢量记录每个字母出现的次数,依次为key值,建立映射。
 
代码:
法1:
 1 class Solution
 2 {
 3 public:
 4     vector<vector<string>> groupAnagrams(vector<string>& strs) {
 5         map<string, vector<string>> anagram;          
 6         //内部进行排序的各个单词为key,以字符串向量vector<string>为value,存储各个字符数量相同的字符串(anagram:变位词)
 7         vector<vector<string>> result;
 8         for (int i = 0; i < strs.size(); i++) {   //遍历每个单词
 9             string str = strs[i];
10             sort(str.begin(), str.end());        //对str进行内部排序
11             if (anagram.find(str) == anagram.end()) {//若无法在哈希表中找到str(新的一个排序好的字符串)
12                 vector<string> item;  //设置一个空字符串向量
13                 anagram[str] = item;  //以排序后的strs[i]作为key
14             }
15             anagram[str].push_back(strs[i]);  //在对应的字符向量中push结果
16         }
17         map < string,vector<string >> ::iterator it;
18         for (it = anagram.begin(); it != anagram.end(); it++) {
19             result.push_back(it->second);
20         }
21         return result;
22     }
23 };

法2:

 1 void change_to_vector(string& str,vector<int> &vec) {
 2     for (int i = 0; i < 26; i++) {
 3         vec.push_back(0);
 4     }
 5     for (int i = 0; i < str.length(); i++) {
 6         vec[str[i] - a]++;
 7     }
 8 }
 9 
10 class Solution
11 {
12 public:
13     vector<vector<string>> groupAnagrams(vector<string> &strs){
14         map<vector<int>, vector<string>> anagram;
15         vector<vector<string>> result;
16         for (int i = 0; i < strs.size(); i++) {
17             vector<int> vec ;
18             change_to_vector(strs[i], vec);
19             if (anagram.find(vec) == anagram.end()) {
20                 vector<string> item;
21                 anagram[vec] = item;
22             }
23             anagram[vec].push_back(strs[i]);
24         }
25         map<vector<int>, vector<string>>::iterator it;
26         for(it = anagram.begin(); it != anagram.end(); it++) {
27             result.push_back(it->second);
28         }
29         return result;
30     }
31 };

 

 

leetcode 49.字母异位词分组

原文:https://www.cnblogs.com/ccllcc/p/12569089.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!