标签:空字符串 pre together ref ring 添加 problems nat sort
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
题意:已知一组字符串,将所有由颠倒的字母顺序构成的字放到一起输出。
算法思路:
方法一:
哈希表以内部进行排序的各个单词为key
,以字符串向量为value
,存储各个字符数量相同的字符串。
anagram
,便利字符串向量strs
中的单词strs[i]
:
str = strs[i]
,对str
进行排序。str
未出现在anagram
中,设置str
到一个空字符串向量的映射。str[i]
添加至字符串向量anagram[str]
中。anagram
,将全部key
对应的value
push
进最终结果中。class Solution{
public:
std::vector<std::vector<std::string>> groupAnagrams(
std::vector<std::string>& strs){
std::map<std::string, std::vector<std::string>> anagram;
std::vector<std::vector<std::string>> result;
for(int i = 0; i < strs.size(); i++){
std::string str = strs[i];
std::sort(str.begin(), str.end());
if(anagram.find(str) == anagram.end()){
std::vector<std::string> item;
anagram[str] = item;
}
anagram[str].push_back((strs[i]));
}
std::map<std::string, std::vector<std::string>> :: iterator it;
for(it = anagram.begin(); it != anagram.end(); it++){
result.push_back((*it).second);
}
return result;
}
};
方法二:
哈希表以26个字母的字符数量为key
,以字符串向量为value
,存储各个字符数量相同的字符串。
vector
到字符串向量的哈希表anagram
,遍历字符串向量strs
中的单词trs[i]
:
strs[i
]中的各个字符数量,存储至vec
。vec
未出现子啊anagram
中,设置一个vec
到一个空字符串向量的映射。strs[i]
添加到字符串向量anagram[vec]
中。anagram
,将全部key
对应的value
push
进最终的结果中。void change_to_vector(std::string &str, std::vector<int> &vec){
for(int i = 0; i < 26; i++) {
vec.push_back(0);
}
for(int i = 0; i < str.length(); i++) {
vec[str[i] - 'a']++;
}
}
class Solution{
public:
std::vector<std::vector<std::string>> groupAnagrams(
std::vector<std::string>& strs){
std::map<std::vector<int>, std::vector<std::string>> anagram;
std::vector<std::vector<std::string>> result;
for(int i = 0; i < strs.size(); i++){
std::vector<int> vec;
change_to_vector(strs[i], vec);
if(anagram.find(vec) == anagram.end()){
std::vector<std::string> item;
anagram[vec] = item;
}
anagram[vec].push_back(strs[i]);
}
std::map<std::vector<int>, std::vector<std::string>> :: iterator it;
for(it = anagram.begin(); it != anagram.end(); it++){
result.push_back((*it).second);
}
return result;
}
};
标签:空字符串 pre together ref ring 添加 problems nat sort
原文地址:https://www.cnblogs.com/lihello/p/11748534.html