strStr函数错误排查:输入mississippi与issip返回-1问题
代码错误分析及修复方案
你的代码存在三个关键问题,导致输入haystack = "mississippi"、needle = "issip"时返回错误结果:
匹配失败直接返回-1,未继续查找后续可能的匹配位置
当第一次找到needle[0]的匹配位置(比如i=1),但后续字符不匹配时,你直接return -1,跳过了后续i=4这个正确的匹配位置。正确逻辑应该是放弃当前匹配尝试,继续循环查找下一个可能的起始点。变量j未在每次匹配尝试前重置为0
j是用来遍历needle的指针,第一次匹配失败后j的值已经不是0了,后续再找到needle[0]的匹配位置时,j会从之前的位置继续累加,导致匹配逻辑完全错误。未处理
i+j超出haystack长度的情况
如果haystack剩余长度小于needle长度,此时访问haystack[i+j]会导致越界,应该直接跳过当前i的匹配尝试。
修复后的代码
class Solution { public: int strStr(string haystack, string needle) { // 特殊情况:needle为空直接返回0 if (needle.empty()) return 0; int n = haystack.size(); int m = needle.size(); // 遍历所有可能的起始位置,剩余长度不足时直接终止 for (int i = 0; i <= n - m; i++) { int j = 0; // 逐个字符匹配 while (j < m && haystack[i + j] == needle[j]) { j++; } // 如果完全匹配,返回起始索引 if (j == m) { return i; } } // 无匹配返回-1 return -1; } };
内容的提问来源于stack exchange,提问作者darvince
相关产品推荐
相关产品推荐

