当前位置: 代码迷 >> 综合 >> leetcode_60 Group Anagrams
  详细解决方案

leetcode_60 Group Anagrams

热度:74   发布时间:2024-02-01 15:16:47.0

题目:

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[["ate","eat","tea"],["nat","tan"],["bat"]
]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

采用hashmap,键key为排序后的字符串,值为相同字母不同排列顺序的字符串;

                         把值依次存储到容器中,即为结果

代码如下:

class Solution {
public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string> > htb;vector<vector<string> > anagrams;for(int i = 0; i < strs.size(); i++){string str = strs[i];sort(str.begin(),str.end());htb[str].push_back(strs[i]);    }for(auto e:htb){anagrams.push_back(e.second);}return anagrams;}
};

将字符串排序算法重写,在字符串较长的情况下会提高效率。统计每个字符的个数,拼接成字符串,来判断是否为相同字母不同顺序的字符串

class Solution {
public:string sortStr(string s){int hab[26] = {0};for(auto e:s){hab[e - 'a']++;}string t = "";for(int i = 0; i < 26; i++){t += string(hab[i], i + 'a');}return t;}vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string> > htb;vector<vector<string> > anagrams;for(int i = 0; i < strs.size(); i++){string str = strs[i];//sort(str.begin(),str.end());str = sortStr(str);htb[str].push_back(strs[i]);    }for(auto e:htb){anagrams.push_back(e.second);}return anagrams;}
};

 

  相关解决方案