C/C++---------------LeetCode第49.字母异位词分组

字母异位词分组

  • 题目及要求
  • 哈希算法
  • 在主函数内使用

题目及要求

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

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

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

哈希算法

思路:对于第一个字符串 “eat”,将其保存到临时变量 data 中,并对其进行排序得到 “aet”。在哈希表中找到键为 “aet” 的项,发现不存在,则创建该键,并将原始字符串 “eat” 加入到值的向量中。
对于第二个字符串 “tea”,同样保存到 data 中,并排序得到 “aet”。在哈希表中找到键为 “aet” 的项,发现已存在,则将原始字符串 “tea” 加入到值的向量中以此类推,到最后遍历哈希表 hash 中的每一对键值对然后将他们全部输出就行

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,vector<string>>hash;
        for(auto str:strs){
            string data=str;
            sort(str.begin(),str.end());   //排序
            hash[str].push_back(data);     //存入哈希
        }
        vector<vector<string>>res;
        for(auto s:hash){           //第二次遍历
            res.push_back(s.second);        
        }
          return res;
    }
};

在主函数内使用

int main() {
    vector<string> strs = { "eat", "tea", "tan", "ate", "nat", "bat" };
    vector<vector<string>> result = groupAnagrams(strs);
    for (vector<string>group : result) {
        for (string str : group) {
            cout << str << "";
        }
        cout << endl;
    }
    return 0;
}

你可能感兴趣的:(C/C++算法,c语言,c++,leetcode)