题目
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.
分析
思路就是使用unordered_map。将每个字符串排序后作为键值,若在此unordered_map中出现过,则将原字符串插入该键值对应的vector中,若没有,则需要先创建此vector。最后遍历此unordered_map输出结果即可。
实现
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string, vector<string>> ansmap;
for(int i=0; i<strs.size(); i++){
string tmp(strs[i]);
sort(tmp.begin(), tmp.end());
if(!ansmap.count(tmp))
ansmap[tmp]={};
ansmap[tmp].push_back(strs[i]);
}
vector<vector<string>> ans;
for(auto v: ansmap)
ans.push_back(v.second);
return ans;
}
};
思考
在做的时候其实我的很多时间都花在调整输出顺序使得和样例一样上面。但是,后来才发现,最后的结果不会管你的输出顺序=_=。看来我是小看了LeetCode这个系统了。