Given an array of strings, group anagrams together.
For example, given: <code>["eat", "tea", "tan", "ate", "nat", "bat"]</code>
Return:
<pre>
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]
</pre>
解題思路
這道題是將字符串進行分類,如果所含的字母相同即為同一類字符串。
換句話說,如果同一類的字符串中的字符進行排序后,他們就是同一個字符串。
我們可以定義一個map<string, int>,每一個排序后的串對應(yīng)他的類別。對于一個新串,如果他屬于其中某個類,則將其加入;如果不屬于任何有一個類,則開一個新類來存儲。
代碼
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
vector<vector<string>> res;
vector<string> linner;
map<string, int> mp;
string copy;
for (int i = 0; i < strs.size(); i++) {
copy = strs[i];
sort(copy.begin(), copy.end());
if (mp.find(copy) == mp.end()) {
//找不到所屬的類別
linner.clear();
linner.push_back(strs[i]);
mp[copy] = res.size();
res.push_back(linner);
} else {
//存在所屬的類別
res[mp[copy]].push_back(strs[i]);
}
}
return res;
}
};