给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
样例
对于字符串数组 [“lint”,”intl”,”inlt”,”code”]
返回 [“lint”,”inlt”,”intl”]
注意
所有的字符串都只包含小写字母
分析:
很显然我们需要对字符串数组中的字符串进行排序, 用来比较字符串是否相等,并且我们需要保存相等字符串的数量,并且需要把这些数量大于1的进行返回。因此,我们需要一个hash表来存储这些信息,map
class Solution {
public:
/**
* @param strs: A list of strings
* @return: A list of strings
*/
vector<string> anagrams(vector<string> &strs) {
// write your code here
map<string, int> strCount;
vector<string> res;
for(auto str : strs) {
sort(str.begin(), str.end());
++strCount[str]; //在计算前需要排序
}
//遍历所有的字符串
for(const auto &str : strs) {
string tmp = str;
sort(tmp.begin(), tmp.end());
/**
*注意此处:当存在相同的数量,但是不同的字符串时,需要一起返回
**/
if(strCount[tmp] > 1)
res.push_back(str);
}
return res;
}
};