LeetCode OJ 之 Anagrams (回文构词法)

来源:互联网 发布:美工工作流程 编辑:程序博客网 时间:2024/06/05 20:54

题目:

Given an array of strings, return all groups of strings that are anagrams.(给定一组字符串,返回符合回文构词法的单词组,即如果某几个单词是回文单词,则放入一个容器中并返回)。

Note: All inputs will be in lower-case.(所有的输入都是小写)

Anagram(回文构词法)是指打乱字母顺序从而得到新的单词,比如 "dormitory" 打乱字母顺序会变成 "dirtyroom" , "tea" 会变成"eat"。
回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。
因此,将几个单词按照字母顺序排序后,若它们相等,则它们属于同一组 anagrams 。

思路:

可以使用unordered_map<string,vector<string> >把Anagram单词排序后的单词作为键,排序前的单词作为值,这些值放到一个容器中,即一个键对应多个值。如果这个值内单词的个数>1,说明存在Anagram单词,则加入到结果容器中。如果=1,说明不存在对应的Anagram词

代码:

class Solution {public:    vector<string> anagrams(vector<string> &strs)     {        vector<string> result;//保存结果        unordered_map<string,vector<string> > groups;//键值对//先把键值对对应起来        for(int i = 0 ; i < strs.size() ; i++)        {            string word = strs[i];            sort(word.begin(),word.end());//对当前单词排序            groups[word].push_back(strs[i]);//插入键值对        }//统计值中单词的个数是否>1,如果>1则把这个容器值插入到result的尾部        for(unordered_map<string,vector<string> >::iterator iter = groups.begin() ; iter != groups.end() ; iter++)        {            if(iter->second.size() > 1)            {                result.insert(result.end(),iter->second.begin(),iter->second.end());            }        }        return result;    }};




0 0
原创粉丝点击