码迷,mamicode.com
首页 > 其他好文 > 详细

49. Group Anagrams (string, map)

时间:2015-10-04 21:00:40      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

 

Note:

  1. For the return value, each inner list‘s elements must follow the lexicographic order.
  2. All inputs will be in lower-case.

思路:

anagram: 由颠倒字母而成的单词

anagram无关乎字母出现的顺序,所以将字母排序后再比较每个字母出现的次数

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        if (strs.size() <= 0) return result;
        
        vector<vector<string>> result;
        map<string,int> anagram;
        int resIndex = 0;
        string s;
        
        for (int i = 0; i < strs.size(); ++i)
        {
            s = strs[i];
            sort(s.begin(), s.end()); //anagram无关乎字母顺序,所以将string按字母排序后再比较
            if (anagram.find(s) == anagram.end()) { //如果还没有出现过该anagram
                vector<string> item;
                item.push_back(strs[i]);
                result.push_back(item);
                anagram.insert(make_pair(s, resIndex++));
            } else {
                result[anagram[s]].push_back(strs[i]);
            }
        }
        
        //each inner list‘s elements must follow the lexicographic order
        for(int i = 0; i < result.size(); i++){
            sort(result[i].begin(), result[i].end());
        }
        return result;
    }
};

 

49. Group Anagrams (string, map)

标签:

原文地址:http://www.cnblogs.com/qionglouyuyu/p/4854871.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!