【leetcode】49. Group Anagrams(c/c++,medium难度)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/maotianyi941005/article/details/81504148

原题链接 Medium

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.

题解:两个字符串如果包含相同字母就算一组

算法

我的思路:

1 怎么判断同组?用sort如果两个字符串sort之后相同肯定是同组

2 同组怎么存在同个vector下?我使用了map<string,vector<string>>,key是sort之后的字符串,value是sort之前的字符串

3 最后遍历map 存一个二维vector返回(这里感觉我是不是做麻烦了,用了三个O(n)的遍历

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<string> strscp = strs;
        vector<vector<string>> strsort;

        map<string,vector<string>> mapstr;
        map<string,vector<string>>::iterator it;
        int len = strs.size();
        int i;
        for(i = 0;i < len; i++){
            sort(strscp[i].begin(),strscp[i].end());
            mapstr[strscp[i]].push_back(strs[i]);
        }
        for(it = mapstr.begin() ; it != mapstr.end(); it++){
            strsort.push_back(it->second);
        }
        return strsort;
    }
};

猜你喜欢

转载自blog.csdn.net/maotianyi941005/article/details/81504148
今日推荐