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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:59:54