统计变位词出现次数题中if替换else if输出错误原因求解
错误原因分析
两种条件写法的核心差异是:两个独立if是顺序执行、无互斥关系,而if + else if是互斥分支,同一轮循环只会执行其中一个。
你的循环内部执行顺序固定为:
- 先更新当前
j指向字符s[j]的哈希表计数 - 执行第一个判断:若窗口长度
j-i+1 < k,则j自增1 - 执行第二个判断:若窗口长度
j-i+1 == k,则直接统计答案、滑动窗口(i、j同时自增)
当使用连续if时,会出现如下错误执行流程:
假设当前处理完j字符后,窗口长度刚好是k-1,会触发第一个if的j自增逻辑,此时窗口长度变为k,但新的j对应的字符还没有执行第一步的计数更新,就直接进入第二个if的分支统计答案,此时哈希表的计数是错误的,无法匹配到正确的变位词。
以你给出的测试用例s = forxxorfxdofr、ana = for(k=3)举例:
- 第二轮循环
j=1时,先处理s[1] = 'o',此时窗口长度为2 < 3,触发第一个if将j自增为2,窗口长度变为3 - 因为是连续
if,直接进入第二个if分支,但s[2] = 'r'还没有被更新到哈希表中,哈希表中r的计数仍为1,count值为1≠0,不会统计答案 - 随后滑动窗口时
i和j同时自增,相当于永远漏掉了s[2]的计数更新,后续所有窗口的计数都处于错乱状态,最终输出0。
使用else if时,第一个if触发j自增后,不会执行后续的else if分支,直接进入下一轮循环,下一轮循环开头会先处理新的j的字符计数,再判断窗口长度,逻辑完全正确。
内容的提问来源于stack exchange,提问作者mag_08
相关产品推荐
相关产品推荐

