昊源建设监理有限公司网站,网站建设交流会,营销推广计划,农林行业网站开发公司目录链接#xff1a;
力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目#xff1a;
https://github.com/September26/java-algorithms 原题链接#xff1a;力扣 描述#xff1a;
给你一个下标从 0 开始的字符串 word #xff0c;字符串只包含小写英文字母。你…目录链接
力扣编程题-解法汇总_分享记录-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 100word 只包含小写英文字母。 解题思路
* 解题思路
* 首先求出每个字符出现的次数。
* 然后每个字符的次数都尝试减1然后统计这个map中的所有value是否一致。
代码
public class Solution2423 {Integer first null;public boolean equalFrequency(String word) {MapCharacter, 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 PredicateInteger() {Overridepublic 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;}
}