标签:std Group Anagrams strs vector vec str anagram Leetcode
Group Anagrams
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
Note:
- All inputs will be in lowercase.
- The order of your output does not matter.
题意:已知一组字符串,将所有由颠倒的字母顺序构成的字放到一起输出。
算法思路:
方法一:
哈希表以内部进行排序的各个单词为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;
}
};
标签:std,Group,Anagrams,strs,vector,vec,str,anagram,Leetcode 来源: https://www.cnblogs.com/lihello/p/11748534.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。