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

作业求助:实现可参数化的连续重复字符检测方法noMultiples()

解决字符串连续重复字符检测的索引越界与泛化问题

看起来你在实现字符串连续重复检测时遇到了几个典型问题:索引越界、方法参数不匹配,还有没有正确泛化到任意重复次数。我帮你梳理下问题点,然后给出修正后的代码。

先说说你原代码里的核心问题

  1. 索引越界:你的循环条件是i < s.length(),当i走到字符串最后几位时,i+1、i+2会超出字符串的索引范围(字符串索引从0开始,最大索引是length()-1),这直接导致了越界错误。
  2. 方法参数与调用不匹配:你定义的方法是noMultiples(int n, String s),但main里却直接调用noMultiples("Hello World"),既缺参数又顺序不对,需要重载一个默认检测3个连续的方法。
  3. 逻辑与方法命名不符:方法名noMultiples的意思应该是「不存在n个或以上连续相同字符」,但你原代码里找到3个连续就返回true,这和预期输出完全相反——比如"faaantastic"有3个连续的a,应该返回false才对。
  4. 没有泛化到任意n:你硬编码了比较3个字符的逻辑,没法适配参数n的变化。

修正后的完整代码

public class StringChecker {
    // 重载方法:默认检测3个连续相同字符
    public static boolean noMultiples(String s) {
        return noMultiples(3, s);
    }

    // 泛化方法:支持指定任意连续重复数量n
    public static boolean noMultiples(int n, String s) {
        // 先处理边界情况:n无效、字符串为空或长度不足n,直接返回true(不可能存在连续n个)
        if (n <= 1 || s == null || s.length() < n) {
            return true;
        }

        int currentConsecutiveCount = 1;
        // 从第二个字符开始,和前一个字符比较
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i) == s.charAt(i - 1)) {
                currentConsecutiveCount++;
                // 一旦连续数量达到n,说明存在重复,返回false
                if (currentConsecutiveCount >= n) {
                    return false;
                }
            } else {
                // 字符不同,重置计数
                currentConsecutiveCount = 1;
            }
        }
        // 遍历完没找到符合条件的连续字符,返回true
        return true;
    }

    public static void main(String[] args) {
        boolean result = noMultiples("Hello World");
        System.out.println(result); // => true(没有3个连续相同字符)
        System.out.println(noMultiples("faaantastic")); // => false(存在3个连续的a)
        System.out.println(noMultiples(2, "Hello World")); // => false(存在2个连续的l)
    }
}

关键细节解释

  • 参数重载:添加了noMultiples(String s),默认调用noMultiples(3, s),完美匹配你main里的调用方式。
  • 边界处理:提前过滤掉n<=1(没意义)、字符串过短的情况,避免无效遍历。
  • 安全的索引访问:通过比较当前字符和前一个字符(i和i-1),永远不会出现索引越界的问题,因为i从1开始,最大到length()-1,i-1最小是0,完全在合法范围内。
  • 动态计数逻辑:用currentConsecutiveCount记录连续相同字符的数量,不管n是2、3还是更大的数,都能正确检测,实现了泛化需求。

内容的提问来源于stack exchange,提问作者Dalaro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:06