如何不使用循环判断字符串中cat与dog的出现次数是否相等
解决思路与代码实现
你当前的代码逻辑存在问题:它仅判断字符串是否同时包含"cat"和"dog",并没有统计两者的出现次数是否相等。比如输入"catcatdog"时,你的代码会返回true,但实际"cat"出现2次、"dog"出现1次,应该返回false。
要在不使用while、for等循环的前提下实现次数统计,可以利用字符串替换的特性:将目标子串全部替换为空字符串,通过原字符串长度与替换后字符串的长度差,计算出子串的出现次数。具体步骤如下:
- 计算"cat"的出现次数:
(s.length() - s.replace("cat", "").length()) / 3,因为"cat"长度为3,长度差除以3就是出现次数。 - 同理计算"dog"的出现次数:
(s.length() - s.replace("dog", "").length()) / 3。 - 比较两个次数是否相等,返回结果。
修正后的代码
class Main { public static boolean catsDogs(String s) { // 计算cat出现的次数 int catCount = (s.length() - s.replace("cat", "").length()) / 3; // 计算dog出现的次数 int dogCount = (s.length() - s.replace("dog", "").length()) / 3; // 比较次数是否相等 return catCount == dogCount; } public static void main(String[] args) { System.out.println(catsDogs("catdog")); // => true(各1次) System.out.println(catsDogs("catcat")); // => false(cat2次,dog0次) System.out.println(catsDogs("1cat1cadodog")); // => true(各1次) System.out.println(catsDogs("catcatdogdog")); // => true(各2次) System.out.println(catsDogs("catcatdog")); // => false(cat2次,dog1次) } }
补充说明
- 这种方法依赖Java的
String.replace(CharSequence target, CharSequence replacement)方法,该方法会替换所有匹配的子串,内部实现虽可能用到循环,但我们的代码中没有显式使用while/for,符合要求。 - 由于"cat"和"dog"都是由3个不同字符组成的子串,不存在重叠匹配的情况,因此该计算方式完全适用。
内容的提问来源于stack exchange,提问作者mendryL
相关产品推荐
相关产品推荐

