连续相同符号最长序列计算代码错误排查
问题分析与代码修正
你的代码核心逻辑存在错误,同时还有边界处理问题,下面逐一说明并给出修正方案:
核心逻辑错误
你的代码没有正确跟踪最长连续相同符号的长度,而是累计了所有相邻相同符号的次数再加初始值1。这种逻辑仅在所有相同符号是一段连续序列时有效(比如题目中的示例),但如果存在多段连续序列就会出错。例如输入+++--++,你的代码会输出4,但实际最长连续符号是3(前三个+)。
测试输入的预期错误
你提到输入10个+时预期输出9,这是错误的——10个连续的+本身就是长度为10的连续序列,代码输出10是符合题目要求的正确结果。
其他代码问题
- 循环越界:当
i = n-1时,访问str[i+1]会指向字符串的结束符'\0',虽然不会导致崩溃,但逻辑上没必要访问超出输入符号范围的位置,应将循环条件改为i < n-1。 - 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; }
修正逻辑说明
- 初始化
max_len(记录最长连续长度)和current_len(记录当前连续长度)为1,因为至少存在一个符号,连续长度最小为1。 - 从第2个字符开始遍历,比较当前字符与前一个字符:
- 若相同,当前连续长度加1,若超过最长长度则更新最长长度。
- 若不同,重置当前连续长度为1。
- 最终输出最长连续长度,覆盖所有场景(全相同符号、全交替符号、多段连续符号)。
内容的提问来源于stack exchange,提问作者Aaman Al Evan
相关产品推荐
相关产品推荐

