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

Java统计相等元素字符:Codeforces提交结果不一致求助

问题分析与解决方案

核心问题原因

你的错误代码大概率是采用递归方式计算最长公共后缀,当输入的字符串a长度达到399991时,递归深度远超Java默认栈容量(通常在1000-10000区间),触发StackOverflowError导致程序异常终止,评测机因此返回错误输出(比如你看到的5)。而通过的代码使用迭代实现,完全避免了栈溢出问题。

验证与修复建议

  1. 本地测试的局限性:你本地测试时用了较短字符串,递归深度未触及栈上限,所以没暴露问题;但Codeforces的测试用例6用了超长字符串,直接触发栈溢出。
  2. 修复方案:把递归逻辑改成迭代实现,遍历两个字符串的后缀找到最长公共部分:
    // 迭代实现最长公共后缀长度
    public static int maxCommonSuffix(String a, String b) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        int count = 0;
        while (i >= 0 && j >= 0 && a.charAt(i) == b.charAt(j)) {
            count++;
            i--;
            j--;
        }
        return count;
    }
    
  3. 计算最少操作次数:根据题目逻辑,最少操作次数公式为a.length() + b.length() - 2 * maxCommonSuffix(a, b)。当b为空时,maxCommonSuffix返回0,结果就是a.length(),完全符合测试用例6的预期输出399991。

额外注意事项

  • 处理超长字符串时,优先选迭代而非递归,避免栈溢出;
  • 本地测试要覆盖边界用例(比如空字符串、超长字符串),才能提前发现问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:14