C语言判断第二个整数序列是否为第一个的连续子串
C语言实现整数序列连续子串判断
需求:给定两个整数序列,判断第二个序列是否为第一个序列的连续子串(子串由第一个序列的连续元素构成)。
你提供的参考代码存在逻辑缺陷,仅能判断两个序列是否存在相同元素,无法校验连续、顺序完全匹配的子串要求,修正后的实现代码如下:
#include <stdio.h> int main() { int x[100], y[100], i, j, dim1, dim2, is_sub = 0; // 输入第一个序列 scanf("%d", &dim1); for(i = 0; i < dim1; i++) { scanf("%d", &x[i]); } // 输入第二个序列 scanf("%d", &dim2); for(j = 0; j < dim2; j++) { scanf("%d", &y[j]); } // 边界判断:子序列长度大于原序列直接返回不匹配 if(dim1 < dim2) { printf("no"); return 0; } // 遍历所有可能的起始位置 for(i = 0; i <= dim1 - dim2; i++) { int match = 1; for(j = 0; j < dim2; j++) { if(x[i + j] != y[j]) { match = 0; break; } } if(match) { is_sub = 1; break; } } if(is_sub) { printf("yes"); } else { printf("no"); } return 0; }
实现逻辑说明:
- 边界校验优先处理,避免无效遍历
- 外层循环控制原序列的子串起始位置,最大起始位置为
dim1 - dim2,防止数组越界 - 内层循环逐位比对子串元素,只要出现不匹配就终止当前起始位置的校验
- 只要存在一个完全匹配的子串就直接终止遍历,提升运行效率
内容的提问来源于stack exchange,提问作者my_name
相关产品推荐
相关产品推荐

