LeetCode #49 - Group Anagrams

题目描述:

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.

将字母异位词分组,最直接的方法就是把每个字符串的字符排序,那么字母异位词都相等,利用哈希表把相同的字符串的下标储存在一起,同时在排序前先备份一个原始的数组,根据下标得到最终结果。

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string> > result;
        if(strs.empty()) return result;
        vector<string> temp=strs;
        for(int i=0;i<strs.size();i++)
            sort(strs[i].begin(),strs[i].end());

        unordered_map<string,vector<int> > x;
        for(int i=0;i<strs.size();i++)
            x[strs[i]].push_back(i);
        for(unordered_map<string,vector<int> >::iterator it=x.begin();it!=x.end();it++)
        {
            vector<string> y;
            for(int i=0;i<it->second.size();i++)
                y.push_back(temp[it->second[i]]);
            result.push_back(y);
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/LawFile/article/details/81111183