您的位置:首页 > 其它

[LeetCode]Anagrams

2015-05-23 14:28 197 查看
Given an array of strings, return all groups of strings that are anagrams.

Note: All inputs will be in lower-case.

[LeetCode Source]

分析:所谓Anagrams指的是回文构词法。就是两个字符串所有的字符相同但是位置不同。比如”eat"和“tea"。

最开始我想通过一种构词方法,就是每个字母对应一个素数,这样可以计算每个字符串的特征值。

这是由于这样的数学性质:任何一个整数可以并且唯一表示成若干个素数的乘积。然后通过Map对应把string对应一个数。对大的string可能还有溢出的情况。

但是对于这一道题目不用如此麻烦。我们维护一个map表,把string的每个字母做排序后放进去,对应它的位置。然后如果在Map中找到该字符串,就说明发现了回文构词,把这两个词放入结果数组中。特别注意的是最早放进去的字符串的处理。

代码如下:

class Solution {
public:
vector<string> anagrams(vector<string>& strs) {
vector<string> ret;
map<string,int> Map;
for(int i = 0;i<strs.size();++i){
string s = strs[i];
sort(s.begin(),s.end());
if(Map.find(s)==Map.end()){
Map[s]=i;
}
else{
if(Map[s]>=0){ //如果是第一次查找到
ret.push_back(strs[Map[s]]);
Map[s]=-1; //避免重复放入
}
ret.push_back(strs[i]);
}
}
return ret;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: