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

为何在字符串匹配代码的if语句中使用[i+j]和j+1?

字符串中第一个匹配项的下标:代码关键语句拆解

先看完整的实现代码:

let strStr = (haystack, needle) => {
    // 遍历主字符串
    for (let i = 0; i < haystack.length; i++) {
        // 遍历匹配字符串
        for (let j = 0; j < needle.length; j++) {
            if (needle[j] !== haystack[i + j]) break;
            if (j + 1 === needle.length) {
                return i
            }
        }
    }
    return -1
};
strStr('sadbutsad', 'sad')

下面拆解你看不懂的两个if语句:

1. if (needle[j] !== haystack[i + j]) break;

这行是用来及时终止无效的匹配尝试:

  • 外层循环的i是主字符串haystack里当前尝试匹配的起始位置
  • 内层循环的j是匹配字符串needle里正在对比的字符下标
  • haystack[i + j]就是主字符串中,从i开始数的第j个字符,刚好和needle[j]是对应位置
  • 只要发现某一对字符不相等,就说明从i这个位置开始,不可能匹配出完整的needle,直接跳出内层循环,去试主字符串的下一个起始位置(i+1)

2. if (j + 1 === needle.length) return i;

这行是用来确认匹配成功并返回结果:

  • 内层循环的j从0开始,每成功匹配一个字符就会加1
  • 当j + 1等于needle的长度时,说明j已经遍历到了needle的最后一个字符(比如needle长度是3,j走到2的时候,j+1就等于3)
  • 这意味着从i开始的连续字符,完全和needle对上了,直接返回起始下标i,整个函数结束

内容的提问来源于stack exchange,提问作者Housni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:12:47