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

LeetCode392判断子序列解法中if(j===t.length)语句作用咨询

你的理解完全正确,我们可以结合双指针的解法逻辑拆解这段代码的执行规则:

核心逻辑说明

这个解法用双指针实现子序列匹配:

  • 指针i记录字符串s的已匹配位置,指针j记录字符串t的已遍历位置
  • 循环条件i < s.length含义为:只要还没匹配完s的所有字符,就继续遍历t查找匹配项

if(j===t.length)的作用

这段判断的逻辑和你猜测的完全一致:

  • 如果指针j已经走完了t的所有字符,说明把t全部遍历完都没匹配完s的全部字符,s不可能是t的子序列,直接返回false
  • 如果在j遍历完t之前,s的所有字符已经全部匹配完成(i等于s的长度),会直接跳出循环执行末尾的return true,此时这个返回false的判断语句完全不会被触发

用你提供的两个示例验证:

示例1:s = "abz",t = "ahbgdc"

let s="abz"
let t="ahbgdc"

function isSubsequence(s, t) {
    let i=0;                               
    let j=0;                             
 while(i<s.length){        
        if(j===t.length){ 
        console.log("t.length is  " + t.length)
            return false;
        }
        if(s[i]===t[j]){                 
            i++;
        }
        j++;
        console.log("j is  "+ j);
     
    }
return true;                              
}
console.log(isSubsequence(s, t));

执行过程:匹配完s的前两个字符a、b后,i停在2,需要匹配第三个字符z;j遍历完t的所有字符后值为6,等于t的长度6,进入if(j===t.length)分支返回false,符合预期。

示例2:s = "abc",t = "ahbgdc"

let s="abc"
let t="ahbgdc"

function isSubsequence(s, t) {
    let i=0;                                
    let j=0;                               
 while(i<s.length){             
        if(j===t.length){ 
            return false;
        }
        if(s[i]===t[j]){                   
            i++;
        }
        j++;
        console.log("j is  "+ j);
        console.log("t.length is  " + t.length)
    }
return true;                               
}
console.log(isSubsequence(s, t));

执行过程:匹配完s的三个字符a、b、c后,i的值变为3,等于s的长度3,循环条件i < s.length不成立,直接跳出循环返回true,此时j的值为5,还没到t的长度6,if(j===t.length)分支不会被触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:12:00