1. 程式人生 > >leetcode Anagrams Group(迴文構詞 分組)

leetcode Anagrams Group(迴文構詞 分組)

題目連結:https://leetcode.com/problems/anagrams/

題意:

Given an array of strings, group anagrams together.

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

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

Note: All inputs will be in lower-case.

分析:Anagram(迴文構詞法)是指打亂字母順序從而得到新的單詞,比如“dormitory”打亂字母吮吸會變成"dirty room","tea"會變成"eat"。

迴文構詞法有一個特點:單詞裡的字母的種類和數目沒有改變,只是改變了字母的排列順序。因此,將幾個單詞按照字母順序排列後,若它們相等,則它們屬於同一組anagrams。

程式碼:

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
         unordered_map<string,vector<string>> group;
         for(const auto &s:strs){
             string key = s;
             sort(key.begin(),key.end());
             group[key].push_back(s);
         }
         vector<vector<string>> res;
         for(auto it = group.cbegin();it!=group.cend();it++){
            vector<string> tmp;
            tmp.insert(tmp.end(),it->second.begin(),it->second.end());
            res.push_back(tmp);
         }
         return res;
    }
};