输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
这个题用STL的容器来做会简单很多。
如何判断两个字符串是字母异位词,可以将这些字符串按照字典进行排序,这样排序后的字符串是一样的。
这样引入一个hash,索引是排序后的字符串,值是保存同一字母异位词的结果Vector,最后扫一遍hash输出即可。
#include <unordered_map> class Solution { public: vector<vector<string>> groupAnagrams(vector<string>& strs) { unordered_map<string, vector<string>> hash; for (const auto& s:strs){ string tmp = s; sort(tmp.begin(), tmp.end()); hash[tmp].push_back(s); } int len = hash.size(), index = 0; vector<vector<string>> ans(len); for (const auto& i : hash){ ans[index++] = i.second; //将同一字母异位词的所有字符串放入ans } return ans; } };
这里用了C++11的新特性,简单说明一下。
unordered_map是一个关联容器,同map一样存储键-值,但是元素不会按照任何次序排列,如其名unordered。它也可以通过键key快速访问对应位置的value。
C++11也推出了auto来方便管理容器的迭代器。
原文:https://www.cnblogs.com/xiazhenbin/p/13299114.html