Re: [闲聊] 每日LeetCode

楼主: oin1104 (是oin的说)   2024-02-06 13:09:27
49. Group Anagrams
给你一些字串
把他们排序好
变成vector<vector<string>>
排序的规则是
当他们拥有的字母种类数量一样就排在一起
像是dog god dgo 就排在一起
dog god dgo pap ppa
就会变成前三个排在一起 后两个排在一起
排在一起就好 顺序没差
解法:
把他们通通丢进map里面就好ㄌ
然后就可以用他们的字母数量当作key
阵列里面放字串当value
然后改变他们的value
也就是后面的字串阵列
然后再把他们塞回去题目要求的阵列阵列
就好ㄌ
这是什么奇怪的宣告方式阿
array<int,30>
为什么不让我直接int abc[30]
这两个差在哪里
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs)
{
map<array<int, 30>, vector<string>> paper;
int len = strs.size();
for(int i = 0 ; i < len ; i ++)
{
int lens = strs[i].size();
array<int, 30> chs = {};
for(int j = 0 ; j < lens ; j ++)
{
chs[strs[i][j]-'a'] ++ ;
}
paper[chs].push_back(strs[i]);
}
vector<vector<string>> res;
for(auto p : paper)
{
res.push_back(p.second);
}
return res;
}
};
作者: wu10200512 (廷廷)   2024-02-06 13:21:00
你直接把字串sort再放进map比较快
楼主: oin1104 (是oin的说)   2024-02-06 13:22:00
先sort再用好像很棒欸
作者: wu10200512 (廷廷)   2024-02-06 13:22:00
还可以边放边找
作者: SecondRun (雨夜琴声)   2024-02-06 13:23:00
为什么是30
楼主: oin1104 (是oin的说)   2024-02-06 13:26:00
因为我只记得有20几个英文字母 忘记是几个了26
作者: wu10200512 (廷廷)   2024-02-06 13:27:00
#1bkEwSda (Marginalman)之前写的 你参考看看
作者: sustainer123 (caster)   2024-02-06 13:28:00
大师
楼主: oin1104 (是oin的说)   2024-02-06 13:31:00
:OOO 大师 我看完了 边整理 然后塞进去

Links booklink

Contact Us: admin [ a t ] ucptt.com