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

连续相同符号最长序列计算代码错误排查

问题分析与代码修正

你的代码核心逻辑存在错误,同时还有边界处理问题,下面逐一说明并给出修正方案:

核心逻辑错误

你的代码没有正确跟踪最长连续相同符号的长度,而是累计了所有相邻相同符号的次数再加初始值1。这种逻辑仅在所有相同符号是一段连续序列时有效(比如题目中的示例),但如果存在多段连续序列就会出错。例如输入+++--++,你的代码会输出4,但实际最长连续符号是3(前三个+)。

测试输入的预期错误

你提到输入10个+时预期输出9,这是错误的——10个连续的+本身就是长度为10的连续序列,代码输出10是符合题目要求的正确结果。

其他代码问题

  1. 循环越界:当i = n-1时,访问str[i+1]会指向字符串的结束符'\0',虽然不会导致崩溃,但逻辑上没必要访问超出输入符号范围的位置,应将循环条件改为i < n-1。
  2. else分支错误:当所有符号交替出现时(比如+-+-),pcount和mcount都为1,此时应输出1而不是0,因为每个符号本身就是长度为1的连续序列。

修正后的代码

#include <stdio.h>

int main()
{
    int n, i;
    char str[99];
    scanf("%d", &n);
    scanf("%s", str);

    int max_len = 1;
    int current_len = 1;

    for (i = 1; i < n; i++) {
        if (str[i] == str[i-1]) {
            current_len++;
            if (current_len > max_len) {
                max_len = current_len;
            }
        } else {
            current_len = 1;
        }
    }

    printf("%d", max_len);
    return 0;
}

修正逻辑说明

  1. 初始化max_len(记录最长连续长度)和current_len(记录当前连续长度)为1,因为至少存在一个符号,连续长度最小为1。
  2. 从第2个字符开始遍历,比较当前字符与前一个字符:
    • 若相同,当前连续长度加1,若超过最长长度则更新最长长度。
    • 若不同,重置当前连续长度为1。
  3. 最终输出最长连续长度,覆盖所有场景(全相同符号、全交替符号、多段连续符号)。

内容的提问来源于stack exchange,提问作者Aaman Al Evan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:01:06