leetcode字母异位词分组

1.暴力法

代码如下:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        int len=strs.size();
        vector<vector<string>> res;
        vector<int> visited(len,0);
        for(int i=0;i<len;i++)
        {
         if(visited[i]==0)
         {
            vector<string> ans;
            ans.push_back(strs[i]);
            string str=strs[i];
            sort(str.begin(),str.end());
            for(int j=i+1;j<len;j++)
            {
                if(visited[j]==0)
                {
                 string str1=strs[j];
                 sort(str1.begin(),str1.end());
                 if(str==str1)
                  {
                      ans.push_back(strs[j]);
                      visited[j]=1;
                  }
                }
            }
            res.push_back(ans);
          }
        }
        return res;
    }
};

2.优化

设map<string,vector<string>> m

以排序---排序相同的字符串的形式存储

这样,排序一样的字符串会在一起,然后遍历m,提取iter->second

代码如下:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        vector<vector<string>> res;
        map<string,vector<string>> M;
        for(int i=0;i<strs.size();i++){
            string key=strs[i];
            sort(key.begin(),key.end());
            M[key].push_back(strs[i]);//排序相同的放在一起
        }
        for(auto ite=M.begin();ite!=M.end();ite++)
            res.push_back(ite->second);
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/105293556