我试图分析这个解决方案的leetcode问题"392。Subsequence"如raunak1508先生所提议。我对第一个if语句的含义感到困惑。if(j===t.length)
。我相信这部分代码决定了何时返回false或继续执行下一个if语句if(s[i]===t[j])
。
谁能告诉我我想的是对的吗?我认为if(j===t.length)
背后的上下文意味着,如果var j
包含var t
的所有特定值,即"ahbgdc"然后返回false....
…但是,如果第二个if语句if(s[i]===t[j])
通过生成匹配先完成,则返回true。在这种情况下,第一个if语句if(j===t.length)
甚至没有机会返回false。
//"abz" will return false
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));
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));
这里j
只是t
的currentIndex,因为我们在t
中向前移动,而i
对s
做同样的事情
let s="abz"
let t="ahbgdc"
最初i = 0
和j = 0
表示它们都分别指向s和t的第一个字符索引
为true的条件是i < s.length
到达i === 2
,j === t.length
到达j === 7
。
这仅仅意味着我们应该在越过t
的最终字符之前到达s
的最终字符,因为t[7]
是undefined
并且在t
字符串之外,所以没有希望为真,因此我们返回false;