G
N
I
D
A
O
L

给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。

如果删除一个字母后,word 中剩余所有字母的出现频率都相同,那么返回 true ,否则返回 false 。

注意:

  • 字母 x 的 频率 是这个字母在字符串中出现的次数。
  • 你 必须 恰好删除一个字母,不能一个字母都不删除。

题目链接:https://leetcode.cn/problems/remove-letter-to-equalize-frequency/

# 解题思路

  1. 统计每个字符出现的次数,可以使用数组代替哈希表
  2. 枚举删除每个字符,判断能否达成题目要求

# 提交结果

image.png

# 代码

a
class Solution {
    public boolean equalFrequency(String word) {
        int[] cnt = new int[26];
        char[] chs = word.toCharArray();
        int n = chs.length;
        for (char c : chs) ++cnt[c - 'a'];
        for (char c : chs) {
            --cnt[c - 'a'];
            if (check(cnt)) return true;
            ++cnt[c - 'a'];
        }
        return false;
    }
    private boolean check(int[] cnt) {
        int count = 0;
        for (int c : cnt) {
            if (c == 0) continue;
            if (count == 0 || count == c) count = c;
            else return false;
        }
        return true;
    }
}
更新于 阅读次数

😉觉得写的还不错,请我喝杯咖啡吧😁

独步凌波 微信支付

微信支付

独步凌波 支付宝

支付宝