Leetcode中級演算法之字謎分組(49)C++
阿新 • • 發佈:2018-12-01
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
輸出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
說明:
所有輸入均為小寫字母。
不考慮答案輸出的順序。
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { vector<vector<string>> res; map<multiset<char>,int> temp; int nums = 0; for(int i=0;i<strs.size();i++) { multiset<char> mp; for(int j=0;j<strs[i].size();j++) mp.insert(static_cast<char>(strs[i][j])); if(temp.find(mp) == temp.end()) { temp.insert({mp,nums}); res.push_back(vector<string>()); res[nums++].push_back(strs[i]); } else res[temp.find(mp)->second].push_back(strs[i]); } return res; } };
思路:定義一個map和multiset,用multiset讀入每一個字串,看是否存在與map中,若不存在,則在res中插入一個空vector<string>
容器,再將對應字串放入該新建vector容器中;若存在則放入對應的vector容器中.