leetcode
子串问题:
字符串,子序列,回文等问题。求解方法一般有动态规划,双指针,滑动窗口等
题目顺序以提交次数,类型排序
76.最小覆盖子串
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。
如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
s = "ADOBECODEBANC", t = "ABC",output = "BANC"
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").
根据窗口的大小适合固定,滑动窗口分为固定窗口大小、求最大满足窗口、最小满足窗口。
- 固定窗口
class Solution {
public:
int slidingWindow(vector<int>& nums) {
int l = 0; // 初始窗口大小为 0
int r = 0;
while(r < nums.size()) { // 窗口未遍历完
if (r<k) {
r++;
continue;
}
r++; // 窗口向右扩展
while (valid() && l < r) { // 当满足条件时,窗口收缩
l++; // 窗口先右收缩
}
}
}
};
- 不定窗口
class Solution {
public:
int slidingWindow(vector<int>& nums) {
int l = 0; // 初始窗口大小为 0
int r = 0;
while(r < nums.size()) { // 窗口未遍历完
r++; // 窗口向右扩展
while (valid() && l < r) { // 当满足条件时,窗口收缩
l++; // 窗口先右收缩
}
}
}
};
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
中心扩散法,如何扩散是关键。
1、扩散左边
2、扩散右边
3、一同扩散
学习时间:
提示:这里可以添加计划学习的时间
例如:
- 周一至周五晚上 7 点—晚上9点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点
学习产出:
提示:这里统计学习计划的总量
例如:
- 技术笔记 2 遍
- CSDN 技术博客 3 篇
- 习的 vlog 视频 1 个