Q:
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
对于字符串数组 [“lint”,”intl”,”inlt”,”code”]
返回 [“lint”,”inlt”,”intl”]
A:
class Solution {
public:
/**
* @param strs: A list of strings
* @return: A list of strings
*/
vector<string> anagrams(vector<string> &strs) {
if (strs.empty()) {
return strs;
}
typedef unsigned int uint32;
typedef std::set<int> index_set;
typedef std::map<std::string, index_set > index_map;
uint32 si = strs.size();
index_map stats;
std::vector<std::string> result;
for ( uint32 i = 0; i < si; ++i ) {
std::string temp(strs[i].begin(), strs[i].end());
std::sort(temp.begin(), temp.end());
stats[temp].insert(i);
}
for ( index_map::const_iterator it = stats.begin(); it != stats.end(); ++it ) {
const index_set& t = it->second;
if (t.size() > 1) {
for ( index_set::const_iterator it2 = t.begin(); it2 != t.end(); ++it2 ) {
result.push_back(strs[*it2]);
}
}
}
return result;
}
};