Anagrams问题(颠倒字母形成的新单词)

来源:互联网 发布:下载淘宝网天猫商城 编辑:程序博客网 时间:2024/05/16 13:43

49 Group Anagrams
Given an array of strings, group anagrams together.

For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:

[
[“ate”, “eat”,”tea”],
[“nat”,”tan”],
[“bat”]
]

卡住:难道要一个字母一个字母的比较么?比如eat和ate,这比较难度有点大
解决思路:
排序string!
string s;
sort(s.begin(),s.end());

那么eat、tea、ate都会排序成相同的字符串。
所以我们使用unordered_map

lass Solution {public:    vector<vector<string>> groupAnagrams(vector<string>& strs) {        unordered_map<string, multiset<string>> mp;        for (string s : strs) {            string t = strSort(s);            mp[t].insert(s);        }        vector<vector<string>> anagrams;        for (auto m : mp) {             vector<string> anagram(m.second.begin(), m.second.end());            anagrams.push_back(anagram);        }        return anagrams;    }private:    string strSort(string& s) {        int count[26] = {0}, n = s.length();        for (int i = 0; i < n; i++)            count[s[i] - 'a']++;        int p = 0;        string t(n, 'a');        for (int j = 0; j < 26; j++)            for (int i = 0; i < count[j]; i++)                t[p++] += j;        return t;    } };
阅读全文
0 0
原创粉丝点击