目录

    进阶文档-算法

    算法

    1. 滑动窗口

      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));
      
    • 哈希

    • 双指针

    • 滑动窗口

    • 子串

    • 普通数组

    • 矩阵

    • 链表

    • 二叉树

    • 图论

    • 回溯

    • 二分查找

    • 贪心算法

    • 动态规划

    • 多维动态规划

    • 技巧