Leetcode76最小覆盖子串(滑动窗口解法)

简介: Leetcode76最小覆盖子串(滑动窗口解法)

Leetcode76最小覆盖子串(滑动窗口解法)

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。

注意:

对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。

答题:

/**
 * @param {string} s
 * @param {string} t
 * @return {string}
 */
var minWindow = function (s, t) {
  let l = 0;
  let r = 0;
  let res = "";
  const m = new Map();
  for (let i = 0; i < t.length; i++) {
    const c = t[i];
    // 放入字典表
    m.set(c, m.has(c) ? m.get(c) + 1 : 1);
  }
  let needType = m.size;
  while (r < s.length) {
    const c = s[r];
    if (m.has(c)) {
      m.set(c, m.get(c) - 1);
      if (m.get(c) === 0) needType -= 1;
    }
    while (needType === 0) {
      const c2 = s[l];
      let newRes = s.slice(l, r + 1);
      if (!res || newRes.length < res.length) res = newRes;
      if (m.has(c2)) {
        m.set(c2, m.get(c2) + 1);
        if (m.get(c2) === 1) needType += 1;
      }
      l++;
    }
    r++;
  }
  return res;
};

解题思路:滑动窗口的解题要点主要在于窗口什么时候向右移动,什么时候左侧缩小

就这道题而言,我们需要做的就是首先向右移动,然后找到一个包含所需字符串的位置,这时候是第一个满足要求的子串,然后窗口左侧缩小,直到不满足条件为止,然后窗口继续向右移动,直到右侧移动到头,左侧也不需要再移动为止。

说起来挺容易的,做起来还是要费点事。为了避免超时,比较两个字符串是否存在包含关系时会用到map,如果不会map的话,直接把字符串的个数存到一个对象中去进行比较也是可以的。

相关文章
|
2月前
【LeetCode 26】239.滑动窗口最大值
【LeetCode 26】239.滑动窗口最大值
36 1
|
2月前
【LeetCode 04】滑动窗口法总结
【LeetCode 04】滑动窗口法总结
24 0
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
57 6
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
54 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
64 1
|
4月前
|
算法 Java
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
56 0
|
4月前
|
存储 算法 Java
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
44 0
|
4月前
|
存储 Python
【Leetcode刷题Python】239. 滑动窗口最大值
文章介绍了两种解决LeetCode上"滑动窗口最大值"问题的方法:使用大堆树和双向递减队列,提供了详细的解析和Python代码实现。
37 0
|
5月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
6月前
|
算法 索引
力扣随机一题 位运算/滑动窗口/数组
力扣随机一题 位运算/滑动窗口/数组
48 0