递归-暴力
思路:一个字符一个字符进行比较。
/**
* @param {string} s1
* @param {string} s2
* @param {string} s3
* @return {boolean}
*/
var isInterleave = function(s1, s2, s3) {
const n = s1.length,
m = s2.length;
if (n + m != s3.length) {
return false;
}
const compare = (i, j, k) => {
if (k == s3.length) {
return true;
}
let res = false;
if (i < n && s1[i] == s3[k]) {
res = compare(i + 1, j, k + 1);
}
// 注意这里可能出现(i指向和j指向的字符一样的情况,这个时候我们不能让下面这条递归执行),这种情况res肯定是true,所以我们让res = res || compare(i,j+1,k+1),直接返回 true 而不执行 compare(i,j+1,k+1)
if (j < m && s2[j] == s3[k]) {
res = res || compare(i, j + 1, k + 1);
}
return res;
}
return compare(0, 0, 0);
};
感谢观看 期待关注
关注我,带你一起写bug
warning :版权所有,转载请注明
有问题的小伙伴请在下方留言,喜欢就点个赞吧