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

请求修正Java程序:将最长连续1序列查找功能改为最短连续1序列查找

修正查找最短连续1序列的Java代码

嘿,我来帮你把这段代码改对~你现在的代码逻辑确实是在找最长连续1,咱们一步步梳理问题,然后修正:

原代码的核心问题

  1. ans初始设为字符串长度,然后用count < ans更新ans,这逻辑完全搞反了——你要找最短的,应该初始把ans设成一个很大的值,再用更小的连续1长度去更新它。
  2. 遇到非1字符时直接重置count,但没把之前统计的连续1长度纳入最短值的比较,而且会把0(非1的情况)错误地算进结果里。
  3. 循环结束后没处理最后一段连续1的情况,比如字符串以1结尾的话,这段长度会被遗漏。

修正后的完整代码

import java.util.Scanner;

class Chotu { 
    // Returns length of the shortest consecutive 1's sequence
    public static int ShortestSequence(String s) { 
        int count = 0; 
        // 初始设为最大整数,确保第一次遇到连续1时能更新
        int ans = Integer.MAX_VALUE; 
        // 标记是否存在至少一段连续1
        boolean hasOnes = false;
        
        for(int i=0; i<s.length(); i++) { 
            if (s.charAt(i) == '1') { 
                count++; 
                hasOnes = true;
            } else { 
                // 遇到非1时,只有之前有统计过连续1,才更新最短长度
                if (count > 0) {
                    ans = Math.min(ans, count);
                    count = 0;
                }
            }
        }
        // 处理最后一段是连续1的情况
        if (count > 0) {
            ans = Math.min(ans, count);
        }
        
        // 没有连续1就返回-1,否则返回最短长度
        return hasOnes ? ans : -1; 
    } 

    // Driver code 
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in); 
        String s = sc.next(); 
        int result = ShortestSequence(s);
        System.out.println(result); 
        sc.close();
    } 
}

关键修改点说明

  • 初始化调整:把ans设为Integer.MAX_VALUE,这样第一次统计到连续1时,必然会把ans更新为这段的长度。
  • 添加存在性标记:hasOnes用来判断字符串里有没有1,没有的话直接返回-1,符合需求。
  • 非1字符处理:遇到非1时,只有当之前有连续1的统计(count>0),才去比较更新最短长度,避免把0混入结果。
  • 收尾检查:循环结束后如果count>0,说明最后一段是连续1,必须把这段长度也加入比较,防止遗漏。
  • 主方法优化:只调用一次ShortestSequence方法,避免重复计算;加上sc.close()规范关闭资源。

测试示例

输入:11100011001
连续1的段分别是3、2、1,最短的是1,运行代码后输出1,完全符合你的期望。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:33:13