JS计算字符串两相同字符间距的if代码段逻辑疑问求解
subLength 函数逻辑解答
你疑惑的 len == -1 判断分支作用
len 变量的初始值 -1 是还未找到第一个匹配字符的标记,这个if判断的作用是区分当前遍历到的目标字符是第一次出现还是第二次出现:
- 第一次匹配到目标字符时,
len还是初始值-1,进入len = i分支,把第一个匹配字符的下标存在len里 - 第二次匹配到目标字符时,
len已经存了第一个字符的下标,不再等于-1,进入else分支,用当前第二个字符的下标i减去第一个下标,再加1,得到的就是包含两个目标字符在内的区间总长度,直接覆盖赋值给len即可
完整逻辑示例验证
举个实际运行例子更清楚:
假设传入参数 str = 'church',char = 'c'
- 遍历到下标0的字符
c,符合匹配:- charCount变成1,小于2
- len初始为-1,所以len被赋值为0
- 遍历到下标3的字符
c,符合匹配:- charCount变成2,未超过2
- len已经是0不等于-1,所以计算
3 - 0 +1 =4,赋值给len
- 遍历结束,charCount等于2,返回len的值4,对应的区间是
chur(包含首尾两个c),符合需求。
额外设计说明
这套逻辑只用一个len变量就同时承担了「是否找到第一个匹配」的标记作用、「存储第一个匹配下标」的作用、「存储最终结果」的作用,遍历只需要执行一次,逻辑简洁效率高。
内容的提问来源于stack exchange,提问作者Vitaliy
相关产品推荐
相关产品推荐

