很简单,可惜刚开始把题目都理解错了;
实际是找出所有的anagrams,把每个字符串sort一下即可,然后用map去找是否存在和它一样的anagrams,
找到之后把当前的加入到返回数组中,并把map中已存在那个字符串也加入到数组中,只加入一次。
class Solution { public: vector<string> anagrams(vector<string> &strs) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<string> res; if (strs.empty()) { return res; } map<string, int> anagram; for (size_t i = 0; i < strs.size(); ++i) { string s = strs[i]; sort(s.begin(), s.end()); if (anagram.find(s) == anagram.end()) { anagram[s] = i; } else { if (anagram[s] >= 0) { res.push_back(strs[anagram[s]]); anagram[s] = -1; } res.push_back(strs[i]); } } return res; } };