如何在Java中检查字符串是否所有字符均重复出现?
解决多重复字符的字符串检查问题
你现有的代码只能处理所有字符完全相同的场景(比如"aaaa"),但没法应对像"abba"这种包含多种字符但每个字符都重复出现的情况。先看看你当前的实现:
public static boolean checkAllRepeated(String input) { char[] chars = input.toCharArray(); int[] counts = new int[chars.length]; int n = input.length(); for (int i = 1; i < n; i++) if (chars[i] != chars[0]) return false; return true; }
这段代码的问题很明显:它只校验了所有字符和第一个字符是否一致,完全没考虑多字符但每个都重复的情况。咱们换个思路,要实现你的需求,核心是确保字符串里的每个字符都至少出现两次。
改进后的代码实现
这里提供两种方案,你可以根据场景选择:
方案1:用HashMap统计字符(兼容所有字符类型)
import java.util.HashMap; import java.util.Map; public static boolean checkAllRepeated(String input) { // 先处理边界情况:空字符串或长度不足2,直接返回false if (input == null || input.length() < 2) { return false; } // 统计每个字符的出现次数 Map<Character, Integer> charCountMap = new HashMap<>(); for (char c : input.toCharArray()) { charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1); } // 遍历计数结果,检查是否有字符只出现一次 for (int count : charCountMap.values()) { if (count < 2) { return false; } } return true; }
方案2:用数组统计(仅适用于ASCII字符,性能更优)
如果你的输入字符串只会包含ASCII字符,可以用数组替代HashMap,效率更高:
public static boolean checkAllRepeated(String input) { if (input == null || input.length() < 2) { return false; } // ASCII字符共128个,用数组记录每个字符的出现次数 int[] charCounts = new int[128]; for (char c : input.toCharArray()) { charCounts[c]++; } // 检查所有出现过的字符是否都至少出现2次 for (int count : charCounts) { if (count > 0 && count < 2) { return false; } } return true; }
代码说明
- 边界处理:空字符串或长度小于2的字符串不可能满足“所有字符重复”的要求,直接返回
false。 - 字符计数:无论是HashMap还是数组,核心都是记录每个字符在字符串中出现的次数。
- 校验逻辑:遍历计数结果,只要发现有字符出现次数小于2,就返回
false;全部通过则返回true。
这样修改后,像"abba"、"aabbcc"这类符合要求的字符串会返回true,而"abc"、"aab"(其中b只出现1次)这类不符合的会返回false。
内容的提问来源于stack exchange,提问作者user9754798
相关产品推荐
相关产品推荐

