c_cpp 给定一组单词,返回给定集合中的anagrams集合
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定一组单词,返回给定集合中的anagrams集合相关的知识,希望对你有一定的参考价值。
vector<string> get_collection_of_anagrams(const vector<string> &words) {
vector<string> res;
if(words.empty()) return res;
unordered_map<string, vector<int>> hash;
for(int i=0; i<words.size(); i++) {
string s = words[i];
sort(s.begin(), s.end());
if(hash.find(s) != hash.end())
hash[s].push_back(i);
else {
vector<int> v = {i};
hash[s] = v;
}
}
for(auto p : hash) {
if(p.second.size() >= 2) {
for(int i : p.second)
res.push_back(words[i]);
}
}
return res;
}
// another similar version
vector<string> get_collections_of_anagrams(const vector<string>& words) {
vector<string> result;
int n = words.size();
if(n == 0 || n == 1)
return result;
unordered_map<string, vector<string>> hash;
for(string word : words) {
string sorted = word;
sort(sorted.begin(), sorted.end());
if(hash.find(sorted) == hash.end()) {
vector<string> vs;
vs.push_back(word);
hash[sorted] = vs;
}
else { /* consider duplications?
vector<string> *v = &hash[sorted];
if(v->find(word) == v->end())
v->push_back(word); */
hash[sorted].push_back(word);
}
}
for(auto& p : hash) {
if(p.second.size() >= 2) {
for(string& s : p.second)
result.push_back(s);
}
}
return result;
}
以上是关于c_cpp 给定一组单词,返回给定集合中的anagrams集合的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 给定一组数字,返回所有可能的排列。例如,[1,2,3]具有以下排列:[1,2,3],[1,3,2],[2
c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口
c_cpp 查找包含T中所有元素的S中的最小窗口。给定一组字符T和一个字符串S,找到S中的最小窗口
c_cpp 给定一组正负整数,重新排列它,使得一端为正整数,另一端为负整数。
2021-08-16:回文对。给定一组 互不相同 的单词, 找出所有 不同 的索引对 (i, j),使得列表中的两个单词, words[i] + words[j] ,可拼接成回文串。
给定一组 GraphQL 变量类型,是不是可以使用客户端模式为集合中的每种类型创建所有有效值的映射