LeetCode-49-Group Anagrams(哈希)-Medium

来源:互联网 发布:逐点圆弧插补算法 编辑:程序博客网 时间:2024/05/19 20:56

题意理解:

将给定字符串分组,要求同一组的字符串由相同字符组成,最终,将各组字符串按字典序输出;


题目分析:

1. 将字符串先进行排序,然后通过字符串比较来判定是否为同一组;

2. 将分组后的字符串集合再进行排序,从而满足题目的字典序要求;

3. 在分组的过程中需要进行查找,本题中使用了hash的思想,但C++的STL中没有hash容器,解题代码中使用map来完成hash功能(map由红黑数实现,效率比很实的hash_map效率低);


解题代码:

class Solution {public:    vector<vector<string>> groupAnagrams(vector<string>& strs) {        vector<vector<string>> ans;        int size=strs.size();        if(size<=0){            return ans;        }                map<string, vector<string>> hashMap;        for(int i=0; i<size; i++){            string s=strs[i];            string t=s;            sort(t.begin(), t.end());            map<string, vector<string>>::iterator iter=hashMap.find(t);            if(iter==hashMap.end()){                vector<string> tV;                tV.push_back(s);                hashMap.insert(pair<string, vector<string>>(t, tV));            }else{                (iter->second).push_back(s);            }        }                for(map<string, vector<string>>::iterator iter=hashMap.begin(); iter!=hashMap.end(); ++iter){            vector<string> tV(iter->second);            sort(tV.begin(), tV.end());            ans.push_back(tV);        }                return ans;    }};


0 0
原创粉丝点击