【每日一题Day191】LC2423删除字符使频率相同 | 枚举 分类讨论

简介: 【每日一题Day191】LC2423删除字符使频率相同 | 枚举 分类讨论

删除字符使频率相同【LC2423】

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

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

注意:

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

通过率好低的简单题

暴力枚举

  • 思路
    暴力枚举可以删除的字符,判断删除后频率是否相同
  • 实现
class Solution {
    public boolean equalFrequency(String word) {
        int[] count = new int[26];
        int n = word.length();
        for (int i = 0; i < n; i++){
            int c = word.charAt(i) - 'a';
            count[c]++;
        }
        Arrays.sort(count);
        int i = 0;
        while (count[i] == 0){
            i++;
        }
        for (int j = i; j < 26; j++){
            count[j]--;
            if (isSame(count, i)){
                return true;
            }
            count[j]++;         
        }
        return false;   
    }
    public boolean isSame(int[] count, int i){
        int val = 0;
        while (i < 26 && count[i] == 0){
            i++;
        }
        for (int j = i + 1; j < 26; j++){
            if (count[j] != 0 && count[j] != count[i]){
                return false;
            }
        }
        return true;
    }
}

image.png

特殊判断

  • 思路如果删除一个字符后剩下的频率相同,那么情况有以下几种
  • 字符串中只有一种字符
  • 字符串中所有字母出现次数都为1
  • 字符串中有一个字母出现1次,其他字母出现次数相同
  • 字符串中有一个字母多出现一次,其他字母出现次数相同
  • 因此可以统计字符的出现次数,然后进行升序排序,判断以上情况是否成立
  • 实现
class Solution {
    public boolean equalFrequency(String word) {
        // 只有一种字母
        // 所有字母出现次数都为1
        // 有一个字母出现1次 其他字母出现次数相同
        // 有一个字母多出现一次
        int[] count = new int[26];
        int n = word.length();
        for (int i = 0; i < n; i++){
            int c = word.charAt(i) - 'a';
            count[c]++;
        }
        Arrays.sort(count);
        int i = 0;
        while (i < 26 && count[i] == 0){
            i++;
        }
        return i == 25 || count[25] == 1 || (count[i] == 1 && count[i + 1] == count[25]) || (count[i] == count[24] && (count[24] + 1 == count[25]));
    }
}

image.png

目录
相关文章
重置SQLSERVER表的自增列,让自增列重新计数
重置SQLSERVER表的自增列,让自增列重新计数
380 0
|
人工智能 并行计算 测试技术
AI计算机视觉笔记三十一:基于UNetMultiLane的多车道线等识别
该项目基于开源数据集 VIL100 实现了 UNetMultiLane,用于多车道线及车道线类型的识别。数据集中标注了六个车道的车道线及其类型。项目详细记录了从环境搭建到模型训练与测试的全过程,并提供了在 CPU 上进行训练和 ONNX 转换的代码示例。训练过程约需 4 小时完成 50 个 epoch。此外,还实现了视频检测功能,可在视频中实时识别车道线及其类型。
|
存储 Java 索引
|
编译器 C语言 C++
Windows下配置GCC(MinGW)环境
Windows下配置GCC(MinGW)环境
3649 0
|
安全 Linux 网络安全
操作系统的基础配置(CentOS 7)
1.修改默认主机名 2.配置IP地址 3.为系统添加操作用户 4.安装常用的软件 5.配置yum源 6.关闭防火墙服务 7.关闭SELinux服务 8.修改SSH服务默认配置 9.修改文件描述符 10.登录超时退出
1389 0
操作系统的基础配置(CentOS 7)
hexo部署(hexo d)报错 FATAL { err: Error: Spawn failed
hexo部署(hexo d)报错 FATAL { err: Error: Spawn failed
370 0
|
数据采集 Java Python
python并发编程:Python在FastAPI服务中使用多进程池加速程序运行
python并发编程:Python在FastAPI服务中使用多进程池加速程序运行
1926 0
|
Java Maven 开发工具
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.3.RELEASE:repac
Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.1.3.RELEASE:repac
228 0
|
存储 芯片
【计算机组成原理】总线
【计算机组成原理】总线
515 0
【计算机组成原理】总线
|
云安全 人工智能 安全
培养云上安全人才 | 阿里云2023首届CTF大赛重磅启动
角逐15万大奖,阿里云x清华大学2023首届CTF大赛火热报名中!
培养云上安全人才 | 阿里云2023首届CTF大赛重磅启动