1941. 检查是否所有字符出现次数相同(cpp,获取哈希map的值)
给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false 。
如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串。
题目很简单,我的答案甚至比标答好,但是标答涉及到在cpp中获取unordered_map的值的方法,记录一下
实际又测试了一下,好像for (auto [_, v] : freq){
这样子写也是没问题的,不知道什么原因,有人能告诉我cpp里方括号加两个参数的时候是什么作用吗?
顺便贴上我的答案
class Solution {
public:
bool areOccurrencesEqual(string s) {
unordered_map<char,int> cnt={};
for(char c:s){
if(cnt.find(c)!=cnt.end()){
cnt[c]+=1;
}
else{
cnt[c]=1;
}
}
int flag=-1;
for(auto i:cnt.values()){
if(flag!=-1){
if(i!=flag)
return false;
}
else
flag=i;
}
return true;
}
};
再贴上标准答案
class Solution {
public:
bool areOccurrencesEqual(string s) {
unordered_map<char, int> freq; // 每个字符的实际频数
for (const char ch : s){
if (!freq.count(ch)){
freq[ch] = 0;
}
++freq[ch];
}
int occ = s.size() / freq.size(); // 每个字符的理论频数
for (auto&& [_, v] : freq){
if (v != occ){
return false;
}
}
return true;
}
};