​力扣解法汇总2423. 删除字符使频率相同

news/2024/7/3 7:06:35

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

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

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

注意:

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

示例 1:

输入:word = "abcc"
输出:true
解释:选择下标 3 并删除该字母,word 变成 "abc" 且每个字母出现频率都为 1 。

示例 2:

输入:word = "aazz"
输出:false
解释:我们必须删除一个字母,所以要么 "a" 的频率变为 1 且 "z" 的频率为 2 ,要么两个字母频率反过来。所以不可能让剩余所有字母出现频率相同。

提示:

  • 2 <= word.length <= 100
  • word 只包含小写英文字母。

解题思路:

* 解题思路:
* 首先,求出每个字符出现的次数。
* 然后每个字符的次数都尝试减1,然后统计这个map中的所有value是否一致。

代码:

public class Solution2423 {
    Integer first = null;

    public boolean equalFrequency(String word) {
        Map<Character, Integer> map = new HashMap<>();
        for (char c : word.toCharArray()) {
            Integer integer = map.getOrDefault(c, 0);
            map.put(c, integer + 1);
        }
        for (char c : map.keySet()) {
            int time = map.getOrDefault(c, 0);
            if (time == 0) {
                continue;
            }
            first = null;
            map.put(c, time - 1);
            if (map.values().stream().allMatch(new Predicate<Integer>() {
                @Override
                public boolean test(Integer integer) {
                    if (integer == 0) {
                        return true;
                    }
                    if (first == null) {
                        first = integer;
                        return true;
                    }
                    return integer.equals(first);
                }
            })) {
                return true;
            }
            map.put(c, time);
        }
        return false;
    }
}


http://lihuaxi.xjx100.cn/news/1087696.html

相关文章

UE5中实现沿样条线创建网格体

本文是对UE官方教程&#xff1a;https://www.bilibili.com/video/BV1eU4y1c7XL的重现&#xff0c;原教程中通过构造函数实现非运行时执行脚本&#xff0c;并通过UE的样条线组件辅助创建路径网格体。该功能最终实现的效果如下&#xff1a; 1.创建基础蓝图 首先创建一个Actor蓝…

Android开发 我的开源Android Log “日志狗”LogDog

目录 一、简介 二、LogDog的优点 1、打印的格式 2、日志信息 3、LogDog的使用便利 4、参数优化 5、日志文件输出 6、日志文件的内容加密 三、依赖使用LogDog 1、添加仓库 2、添加依赖 四、使用说明 1、初始化 2、配置说明 3、如何使用和参数说明 一、简介 LogDo…

stable diffusion的使用

文章目录 1 文生图1.1 mountains and trees and gree1.2 three dogs1.3 cats1.4 three lovely cats1.5 beautiful girl1.6 机器猫1.7 卡通图像生成 1 文生图 1.1 mountains and trees and gree 1.2 three dogs 1.3 cats 1.4 three lovely cats 1.5 beautiful girl stable diff…

Linux主机信息搜集

1、系统架构 打印系统信息 uname -a 文件 /etc/issue是一个文本文件&#xff0c;其中包含要在登录提示之前打印的消息或系统标识 cat /etc/issue /etc/lsb-release&#xff0c;/etc/redhat-release文件包含一个被解析以获取信息的描述行 cat /etc/*-release /proc/versi…

MLC LLM:将大模型运行在手机端的部署工具

前言 MLC LLM 是一个通用的解决方案 它允许任何语言模型在不同的硬件后端和本地应用程序集上进行本地部署 并为每个人提供一个高效的框架&#xff0c;以进一步优化模型的性能&#xff0c;满足他们自己的用例 其使命是让每个人都能在自己的设备&#xff08;如手机端&#xf…

大学生学java编程的就业前景怎么样?我来聊聊自己的见解

今天兴哥想跟大家分享一个话题&#xff0c;就是学java到底好不好找工作。因为我发现很多粉丝朋友&#xff0c;之前可能并不是从事IT行业的&#xff0c;然后想转行来做这一行&#xff0c;或者是有些大四即将面临毕业的老哥&#xff0c;可能大学没有好好学习吧&#xff0c;然后专…

CSS媒体查询(@media)全面解析

随着移动设备的快速普及&#xff0c;用户不再只是通过传统的电脑系来浏览 Web 内容&#xff0c;越来越多的用户开始使用各种尺寸的智能手机、平板电脑或者其它设备来浏览 Web 内容&#xff0c;为了确保使用不同设备的用户都能拥有不错的体验就需要用到媒体查询。 媒体查询是 CS…

贪心算法OJ刷题(2)

多机调度问题 题目描述 某工厂有n个独立的作业&#xff0c;由m台相同的机器进行加工处理。作业i所需的加工时间为 t i t_i ti​&#xff0c;任何作业在被处理时不能中断&#xff0c;也不能进行拆分处理。现厂长请你给他写一个程序&#xff1a;算出n个作业由m台机器加工处理的…