49. Group Anagrams

来源:互联网 发布:作战网络装备 编辑:程序博客网 时间:2024/05/01 22:20

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

Note: All inputs will be in lower-case.

这题先得知道啥叫Anagrams,知道后其实很简单。

首先简单介绍一下Anagram(回文构词法)。Anagrams是指由颠倒字母顺序组成的单词,比如“dormitory”颠倒字母顺序会变成“dirty room”,“tea”会变成“eat”。

回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。

For example:

Input:  ["tea","and","ate","eat","den"]

Output:   ["tea","ate","eat"]

思路:

使用map来记录某一类字符串在返回结果中的索引。

class Solution {public:    vector<vector<string>> groupAnagrams(vector<string>& strs) {string s;map<string, int> anagramMap;vector<vector<string>> res;for (int i = 0; i < strs.size(); ++i) {//得到每一个字符串,并将其排序s = strs[i];sort(s.begin(), s.end());//如果map中没有当前的字符串,则将其加入map,以字符串为key,当前res的size为value//将当前的字符串也加入结果if (anagramMap.find(s) == anagramMap.end()){anagramMap[s] = res.size();vector<string> tmp;res.push_back(tmp);res[anagramMap[s]].push_back(strs[i]);}//如果map中存在当前字符串else{//将当前的字符串也加入结果res[anagramMap[s]].push_back(strs[i]);}}for (int i = 0;i<res.size();++i){sort(res[i].begin(),res[i].end());}return res;}};


0 0