您的位置:首页 > 其它

变位词排序

2016-05-17 20:34 239 查看

Problems

请编写一个方法,对一个字符串数组进行排序,将所有变位词合并,保留其字典序最小的一个串。这里的变位词指变换其字母顺序所构成的新的词或短语。例如”triangle”和”integral”就是变位词。

给定一个string的数组str和数组大小int n,请返回排序合并后的数组。保证字符串串长小于等于20,数组大小小于等于300。

测试样例:

输入:[“ab”,”ba”,”abc”,”cba”]

返回:[“ab”,”abc”]

Solution

使用一个哈希表,将一类变位词存放在一个数组中,然后对一类字符串进行排序,将字典序最小的字符串加入返回数组。

最后对返回数组进行排序。

class SortString {
public:
vector<string> sortStrings(vector<string> str, int n) {
// write code here
map<string,vector<string>> hash_map;
for (int i = 0;i<str.size();++i)
{
string tmp = str[i];
sort(tmp.begin(),tmp.end());
hash_map[tmp].push_back(str[i]);
}
vector<string> ret;
for (map<string,vector<string>>::iterator it = hash_map.begin();it != hash_map.end();++it)
{
sort(it->second.begin(),it->second.end());
ret.push_back(it->second[0]);
}

sort(ret.begin(),ret.end());
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: