LeetCode OJ Anagrams

来源:互联网 发布:淘宝五线谱乐器专营店 编辑:程序博客网 时间:2024/05/16 12:50

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

将可以组成anagram的string都放到一个set里,并用一个key对应,比如dog、god、dgo,都可以用dgo对应(这里直接用排序得到key),这样就形成了一个map, 最后遍历map到一个放答案的vector即可。注意单独的元素不插入map中,但是相同的两个元素可以插入,比如传进来的vector中如果有且仅有一个dog,那么答案中没有dog,但是如果有两个dog,答案中应该要有dog。

这是直接用一个排序的string作为key的版本:

class Solution {public:    vector<string> anagrams(vector<string> &strs) {        map<string, multiset<string> > strM;        for (vector<string>::iterator iter = strs.begin(); iter != strs.end(); iter++) {            strM[getKey(*iter)].insert(*iter);        }        vector<string> ans;        for (map<string, multiset<string> >::iterator iter = strM.begin(); iter != strM.end(); iter++) {            if (iter->second.size() == 1) continue;            for (set<string>::iterator iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {                ans.push_back(*iter2);            }        }        return ans;    }    string getKey(string s) {        string sortS = s;        sort(sortS.begin(), sortS.end());        return sortS;    }};
这是用一个vector表示字母使用情况的版本:

class Solution {public:    vector<string> anagrams(vector<string> &strs) {        map<vector<int>, multiset<string> > strM;        for (vector<string>::iterator iter = strs.begin(); iter != strs.end(); iter++) {            strM[getKey(*iter)].insert(*iter);        }        vector<string> ans;        for (map<vector<int>, multiset<string> >::iterator iter = strM.begin(); iter != strM.end(); iter++) {            if (iter->second.size() == 1) continue;            for (set<string>::iterator iter2 = iter->second.begin(); iter2 != iter->second.end(); iter2++) {                ans.push_back(*iter2);            }        }        return ans;    }    vector<int> getKey(string s) {        vector<int> letterInS;        for (int i = 0; i < 26; letterInS.push_back((i++) - i));        for (int i = 0; i < s.size(); i++) {            letterInS[s[i] - 'a']++;        }        return letterInS;    }};



0 0
原创粉丝点击