Leetcode 49 Group Anagrams
2017-10-27 22:07
323 查看
没做出来,自己的算法超时
参考后
class Solution { public: typedef map<char, int>::iterator MIT; vector<vector<string>> groupAnagrams(vector<string>& strs) { // mark the work vector<vector<string> > ret; vector<map<char,int> > maps; size_t n = strs.size(); for (size_t i = 0; i < n; ++i) { string str = strs[i]; size_t strlen = str.size(); map<char, int> tmp; for (size_t j = 0; j < strlen; ++j) { ++tmp[str[j]]; } size_t k = 0; for (; k != maps.size(); ++k) { if (maps[k].size() != tmp.size()) continue; MIT itmp = tmp.begin(); for (; itmp != tmp.end(); ++itmp) { MIT imaps = maps[k].find(itmp->first); if (maps[k].end() == imaps || imaps->second != itmp->second) break; } if (itmp != tmp.end()) continue; else { ret[k].push_back(str); break; } } // 没找到 if (k == maps.size()) { ret.push_back(vector<string>(1, str)); maps.push_back(tmp); } } for (size_t m = 0; m <ret.size(); ++m) { sort(ret[m].begin(), ret[m].end()); } return ret; } };
参考后
class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map <string, multiset<string> > mp; for (auto str : strs) { // for (size_t i = 0; i != strs.size(); ++i) { //string str = strs[i]; string keystr = sortStr(str); // sort(keystr.begin(), keystr.end()); mp[keystr].insert(str); } vector<vector<string> > ret; for (auto m : mp) { ret.push_back(vector<string>(m.second.begin(), m.second.end())); } return ret; } private: // sort 时间复杂度 O(n*logn) // sortStr 时间复杂度 o(n) string sortStr(string s) { string ret; vector<int> flag(26, 0); for (auto ch : s) { ++flag[ch - 'a']; } for (size_t i = 0; i < 26; ++i) { ret += string(flag[i], 'a' + i); } return ret; } };
相关文章推荐
- LeetCode49_Group Anagrams
- Leetcode 49 Group Anagrams
- Leetcode-49: Group Anagrams
- [LeetCode 49]Group Anagrams(利用数据结构和排序简化问题)
- LeetCode49 Group Anagrams解题报告
- Leetcode 49 Group Anagrams
- 【leetcode】【49】Group Anagrams
- [LeetCode-Algorithms-49] "Group Anagrams" (2017.11.21-WEEK12)
- Leetcode 49 Group Anagrams
- leetcode49-Group Anagrams(同构词(相同字母组成的单词)分类)
- LeetCode 49 Group Anagrams(字符串分组)
- LeetCode 49 Group_Anagrams Java实现
- [python]leetcode(49). Group Anagrams
- leetcode——49——Group Anagrams
- 【LeetCode】C# 49、Group Anagrams
- Leetcode 49: Group Anagrams
- LeetCode-49-Group Anagrams(哈希)-Medium
- leetcode(49):Group Anagrams
- leetcode49 Group Anagrams
- LeetCode49——Group Anagrams