Anagram:变位词。两个单词是变位词关系的条件是:组成单词的字符相同,只是顺序不同
第一次看这道题看了半天没明白要干嘛,丫就不能给个样例输入输出么。。后来还是看网上其他人的总结知道是怎么回事。
通常的做法是:把字符串内的字符排序,这样,凡是变位词都会变成相同的单词。用map记录这样的单词出现了几个,如果超过1个,则加入结果集中。
代码:
1 vector<string> anagrams(vector<string> &strs) { 2 vector<string> res; 3 map<string, int> record; 4 5 for (int i = 0; i < strs.size(); i++) { 6 string tmp = strs[i]; 7 sort(tmp.begin(), tmp.end()); 8 map<string, int>::iterator it = record.find(tmp); 9 if (it == record.end()) 10 record.insert(pair<string, int>(tmp, 1)); 11 else 12 it->second++; 13 } 14 15 for (int i = 0; i < strs.size(); i++) { 16 string tmp = strs[i]; 17 sort(tmp.begin(), tmp.end()); 18 map<string, int>::iterator it = record.find(tmp); 19 if (it->second > 1) 20 res.push_back(strs[i]); 21 } 22 23 return res; 24 }