【leetcode】Anagrams (middle)
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
anagrams 的意思是两个词用相同的字母组成 比如 “dog" "god"
思路:
把单词排序 如 dog 按字母排序变为 dgo
用unordered_map<string, int> 记录排序后序列第一次出现时,字符串在输入string向量中的位置
用vector<bool> 记录每个输入字符串是否为anagram, 如果在map中发现已经存在了,就记录当前和初始的字符串都是anagram
class Solution { public: vector<string> anagrams(vector<string> &strs) { vector<string> ans; vector<bool> isanagrams(strs.size(), false); unordered_map<string, int> hash; if(strs.size() == 0) return ans; for(int i = 0; i < strs.size(); i++) { string cur = strs[i]; sort(cur.begin(), cur.end()); if(hash.find(cur) == hash.end()) //没出现过 { hash[cur] = i; //记录第一次出现是strs中的哪一个 } else //出现过 { isanagrams[hash[cur]] = true; isanagrams[i] = true; } } for(int j = 0; j < strs.size(); j++) { if(isanagrams[j] == true) { ans.push_back(strs[j]); } } return ans; } };