Leetcode Anagrams

OpenSoucre發表於2014-07-04

Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

題目的意思是:給出一組字串,按組返回擁有相同變位詞的字串

解題思路是:

  對單詞中得字母排序,如果排序後的單詞是一樣的,那麼我們可以判定這兩個單詞有相同的變位詞。

  • 首先,求出每個單詞的變位詞,以變位詞作為鍵插入雜湊表中,值為一個連結串列。
  • 然後,把該單詞附在這個連結串列末端。
  • 最後,遍歷雜湊表的值,輸出長度大於1的字串

 

class Solution {
public:
    vector<string> anagrams(vector<string> &strs){
        unordered_map<string, vector<int> > hash_map;
        for(int  i = 0 ; i < strs.size(); ++ i){
            string s = strs[i];
            sort(s.begin(),s.end());
            if(hash_map.find(s) != hash_map.end()){
                vector<int> a = hash_map[s];
                a.push_back(i);
                hash_map[s] = a;
            }else{
                vector<int> a;
                a.push_back(i);
                hash_map.insert(make_pair(s,a));
            }
        }
        vector<string> res;
        for(unordered_map<string,vector<int> >::iterator iter = hash_map.begin(); iter!= hash_map.end();++iter){
            vector<int> a = iter->second;
            if(a.size() > 1){
                for(int i = 0 ; i < a.size(); ++ i){
                    res.push_back(strs[a[i]]);
                }
            }
        }
        return res;
    }

};

 

相關文章