Anagrams

来源:互联网 发布:量化交易数据 编辑:程序博客网 时间:2024/06/15 20:51

Given an array of strings, return all groups of strings that are anagrams.(返回有为回文构词法的组

Note: All inputs will be in lower-case.

Anagrams(回文构词法)是指由颠倒字母顺序组成的单词。首先回文,则排序,则可以检查。但是不能改变原来的数据(用临时变量)。

后面查找很容易想到hash,由于c++对hash支持不太好,此处用map。(或者另一思路,字典在排序。较为麻烦)。

  vector<string> anagrams(vector<string> &strs)     {    if (strs.empty())vector<string>();        map<string ,int> str_map;    map<string ,int>::iterator it;    vector<string> res;        for (int i = 0;i < strs.size();i++)//加入到map后续看是否,该数据存在,不存在则加入map,存在则加入结果(并把map中的也加入)    {    string str_temp = strs[i];//不破坏原数据    sort(str_temp.begin(),str_temp.end());        if ((it = str_map.find(str_temp)) == str_map.end())//未找到    {    str_map.insert(pair<string,int>(str_temp,i));        }    else    {        if(it->second >= 0)//的考虑开始加进去的    {    res.push_back(strs[it->second]);    it->second = -1;//清除掉(已加入)    }    res.push_back(strs[i]);//后续的!    }    }    return res;        }
测试用例:

"tea","and","ate","eat","den“  (输入)

"tea","ate","eat","and","den” (输出)



0 0
原创粉丝点击