跳到主要内容

2423.删除字符使频率相同

链接:2423.删除字符使频率相同
难度:Easy
标签:哈希表、字符串、计数
简介:给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。如果删除一个字母后,word 中剩余所有字母的出现频率都相同,那么返回 true ,否则返回 false 。

题解 1 - cpp

  • 编辑时间:2023-04-29
  • 内存消耗:6MB
  • 编程语言:cpp
  • 解法介绍:模拟。
class Solution {
public:
bool equalFrequency(string word) {
int cnt[26] = {0};
for (auto &c : word) cnt[c - 'a']++;
map<int, vector<int>> m;
for (int i = 0; i < 26; i++)
if (cnt[i]) m[cnt[i]].push_back(i);
// 如果都是一个频率,只有在频率都是1或者数量为1的时候才可以
if (m.size() == 1) return m.begin()->first == 1 || m.begin()->second.size() == 1;
// 超过两个频率就报错
if (m.size() != 2) return false;
int pi = -1;
vector<int> pl;
for (auto &item : m) {
int ci = item.first;
vector<int> cl = item.second;
if (pi == -1) pi = ci, pl = cl;
// 如果有一个频率是1且数量是1, 可以直接删
else if (pi == 1 && pl.size() == 1 || ci == 1 && cl.size() == 1) return true;
// 如果两个频率不差1, 就报错
else if (pi + 1 != ci) return false;
// 如果高频率不是只有1个,就报错
else if (cl.size() != 1) return false;
}
return true;
}
};