LeetCode[Hash Table]: Anagrams

2015-01-27 06:07:54 · 作者: · 浏览: 14

Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.

思路:对每一个单词的所有字母按照字典顺序排序,排序结果作为key,所有具有相同key的单词组合在一起成为一个Anagram group。最后返回所有的Anagram group。

class Solution {
public:
    vector
  
    anagrams(vector
   
     &strs) { vector
    
      result; unordered_map
     
      > dict; for (auto word : strs) dict[getLetters(word)].push_back(word); for (auto wordGroup : dict) if (wordGroup.second.size() > 1) result.insert(result.end(), wordGroup.second.begin(), wordGroup.second.end()); return result; } private: string getLetters(string word) { string letters; for (auto letter : word) { int i; for (i = 0; i < letters.size(); ++i) if (letters[i] > letter) break; letters.insert(letters.begin() + i, letter); } return letters; } };
     
    
   
  


上面的解法中,对每一个单词按照字典顺序排序采用自己写的插入排序算法,也可以采用 中的sort函数。

class Solution {
public:
    vector
  
    anagrams(vector
   
     &strs) { vector
    
      result; unordered_map
     
      > dict; for (auto word : strs){ string tmp = word; sort(tmp.begin(), tmp.end()); dict[tmp].push_back(word); } for (auto group : dict) if (group.second.size() > 1) result.insert(result.end(), group.second.begin(), group.second.end()); return result; } };