我正在处理以下问题陈述:
如果字符串的所有字符出现相同的次数,则该字符串是有效的。如果我们可以只删除字符串中 1 个索引处的 1 个字符,并且剩余的字符将出现相同的次数,这也是有效的。给定一个字符串 s,判断它是否有效。如果是,返回YES,否则返回NO。
例如,如果s=abc,它是一个有效的字符串,因为频率是 {a:1,b:1,c:1}。所以是s=abcc因为我们可以删除一个c并且在剩余的字符串中每个字符都有 1 个。s=abccc 但是,如果字符串无效,因为我们只能删除 1 次出现 c。这将留下{a:1,b:1,c:2}.
我想出了下面的代码,但它没有按预期工作,并且在此输入上失败abcdefghhgfedecba。它正在打印“NO”,但该输入应该是“YES”。
private static String isValid(String s) {
if (s == null || s.equals("")) {
return "NO";
}
Map<Character, Integer> frequencies = new HashMap<>();
for (char ch : s.toLowerCase().toCharArray())
frequencies.put(ch, frequencies.getOrDefault(ch, 0) + 1);
int count = 0;
// Iterating over values only
for (Integer value : frequencies.values()) {
if (value == 2) {
count++;
}
}
if (count >= 1) {
return "YES";
}
return "NO";
}
我在这里做什么错了?做到这一点的最佳和有效方法是什么?
慕尼黑5688855
慕勒3428872
相关分类