49. Group Anagrams

题目:

Given an array of strings, group anagrams together.

(给定一个字符串数组,将他们根据anagram归类)

样例:

given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

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

思路:
对于这道题,字符串是否属于同一类,有一个很明显的特征,就是对相同类的字符串而言,单个字符串按照字母顺序排序之后,得到的排序结果是相同的,如eat与tea,排序后得到的结果都是aet。

基于这样的前提,我们可以建立这样的哈希表:索引值是字符串排序后的结果,而哈希值则为得到这个结果的所有字符串。对于输入的每一个字符串,先排序,然后放到哈希表中,就完成了字符串的归类。
最后,只需要将哈希表转换为字符串数组组成的vector就可以了。

代码:
class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        map<string,vector<string> > m;
        vector<vector<string>> res;
        for(int i = 0 ; i < strs.size() ;i ++)
        {
            string curr = strs[i];
            string temp = curr;
            sort(temp.begin(),temp.end());
            m[temp].push_back(curr);
        }
        
        for(map<string,vector<string> >::iterator it = m.begin();it!=m.end();it++)
            res.push_back(it->second);
        
        return res;
    }
};

 




posted @ 2017-06-11 13:25  MT.Queen  阅读(137)  评论(0编辑  收藏  举报