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

如何完善Java代码实现可重叠的字符串模式匹配次数统计?

解决重叠模式字符串计数问题

这里给出修正后的完整代码,实现允许重叠匹配的模式计数功能:

public class Main {
    public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab";
    public static final String PATTERN = "aab";

    public static void main(String[] args) {
        int count = 0;
        int patternLength = PATTERN.length();
        int textLength = TEXT.length();

        // 遍历所有可能的起始位置,避免数组越界
        for (int i = 0; i <= textLength - patternLength; i++) {
            boolean isMatch = true;
            // 逐个比对模式字符串的每个字符
            for (int j = 0; j < patternLength; j++) {
                if (TEXT.charAt(i + j) != PATTERN.charAt(j)) {
                    isMatch = false;
                    break; // 不匹配直接跳出内层循环,减少无效比对
                }
            }
            if (isMatch) {
                count++;
            }
        }

        System.out.println("字符串 " + PATTERN + " 在文本中出现了 " + count + " 次");
    }
}

关键修改说明:

  • 修正循环范围:原代码循环到TEXT.length()会导致后续charAt(i+j)触发越界异常,正确范围是i <= textLength - patternLength,确保从i开始能完整容纳整个模式字符串。
  • 移除重复变量定义:原循环内重新定义的int count = 1会覆盖外层计数变量,直接删除该错误定义。
  • 添加字符比对逻辑:通过内层循环逐个校验文本起始位置i后的字符与模式字符串的对应字符,一旦不匹配就终止当前位置的校验。
  • 匹配成功计数:当某个起始位置的所有字符都匹配时,将计数加1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:20:35