You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用循环判断字符串中cat与dog的出现次数是否相等

解决思路与代码实现

你当前的代码逻辑存在问题:它仅判断字符串是否同时包含"cat"和"dog",并没有统计两者的出现次数是否相等。比如输入"catcatdog"时,你的代码会返回true,但实际"cat"出现2次、"dog"出现1次,应该返回false。

要在不使用while、for等循环的前提下实现次数统计,可以利用字符串替换的特性:将目标子串全部替换为空字符串,通过原字符串长度与替换后字符串的长度差,计算出子串的出现次数。具体步骤如下:

  1. 计算"cat"的出现次数:(s.length() - s.replace("cat", "").length()) / 3,因为"cat"长度为3,长度差除以3就是出现次数。
  2. 同理计算"dog"的出现次数:(s.length() - s.replace("dog", "").length()) / 3。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:55:20