Anagrams
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
anagrams变位词。
如:eat和tea,字母相同,只是排列顺序不同。
思路,用hashtable,先对string中的字母进行排序,这样所有的变位词都会变得相同。在hashtable中为一个入口,再利用unordered_map<string, MyStr>进行构建,需要注意,如果是第一次遇见相同的变位词的话,需要把当前str和在hashtable中的str都压入结果vector中。
class MyStr{ public: string str; bool isVisited; MyStr(string s, bool a):str(s),isVisited(a){} MyStr(){} }; class Solution { public: vector<string> anagrams(vector<string> &strs) { unordered_map<string, MyStr> h; vector<string> re; for(vector<string>::iterator it = strs.begin(); it != strs.end(); it++){ string s = *it; sort(s.begin(), s.end()); if(h.find(s) == h.end()){//not found h[s] = MyStr(*it, false); } else if (h[s].isVisited == false){// first found re.push_back(h[s].str); re.push_back(*it); h[s].isVisited = true; } else{//not first found re.push_back(*it); } } return re; } };