算法
-
滑动窗口
const s = "ADOBECODEBANC"; const t = "ABC"; const minWindow = (s, t) => { if (t.length > s.length) return ""; if (t.length === s.length) { if (t === s) return t; return ""; } if (t.split("").some((i) => !s.split("").includes(i))) return ""; let startIndex = 0; let endIndex = 0; endIndex = t.length - 1; const result = test(s, t, startIndex, endIndex, []); return result; }; const test = (s, t, startIndex, endIndex, resultArr) => { if (!t.split("").includes(s[startIndex])) { // 第一个字符不在t中 startIndex + 1 if (endIndex - startIndex === t.length && endIndex > s.length) return resultArr; return test(s, t, startIndex + 1, endIndex, resultArr); } const strArr = s.slice(startIndex, endIndex + 1).split(""); const tArr = t.split(""); const falseStr = tArr.some((i) => !strArr.includes(i)); if (falseStr) { if (endIndex > s.length) return resultArr; return test(s, t, startIndex, endIndex + 1, resultArr); } else { resultArr.push(s.slice(startIndex, endIndex + 1)); if (endIndex - startIndex === t.length && endIndex > s.length) return resultArr; return test(s, t, startIndex + 1, endIndex, resultArr); } }; console.log(minWindow(s, t));
-
哈希
-
双指针
-
滑动窗口
-
子串
-
普通数组
-
矩阵
-
链表
-
二叉树
-
图论
-
回溯
-
二分查找
-
栈
-
堆
-
贪心算法
-
动态规划
-
多维动态规划
-
技巧