LeetCode Hot 100:子串

力扣hot100第12题:最小覆盖子串python 摘要:本文介绍了一个求解字符串最小覆盖子串的滑动窗口算法。给定字符串s和t,要求在s中找到包含t所有字符(包括重复字符)的最短子串。算法使用双指针维护滑动窗口,通过need字典记录t的字符需求,window字典记录当前窗口字符数。当窗口满足覆盖条件时收缩左边界,不断更新最优解。时间复杂度为O(n),空间复杂度为O(m)。示例展示了算法如何找到s="ADOBECODEBANC"中包含t="ABC"的最短子串"BANC"。 阅读详情

LeetCode Hot 100:子串

560. 和为 K 的子数组

思路 1:二重循环枚举(超时)

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int n = nums.size();
        int count = 0;
        for (int start = 0; start < n; start++)
            for (int len = 1; len <= n - start; len++)
                if (accumulate(nums.begin() + start, nums.begin() + start + len,
                               0) == k)
                    count++;
        return count;
    }
};

思路 2:前缀和

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> preSum(n + 1, 0);
        for (int i = 1; i <= n; i++)
            preSum[i] = preSum[i - 1] + nums[i - 1];

        int count = 0;
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j <= n; j++)
                if (preSum[j] - preSum[i] == k)
                    count++;
        return count;
    }
};

哈希表优化:

class Solution {
public:
    int subarraySum(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> preSum(n + 1, 0);
        for (int i = 1; i <= n; i++)
            preSum[i] = preSum[i - 1] + nums[i - 1];

        int count = 0;
        unordered_map<int, int> hashMap; // <preSum, cnt>
        for (int i = 0; i <= n; i++) {
            if (hashMap.find(preSum[i] - k) != hashMap.end())
                count += hashMap[preSum[i] - k];
            hashMap[preSum[i]]++;
        }
        
        return count;
    }
};

239. 滑动窗口最大值

思路 1:暴力

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> ans;
        for (int i = 0; i <= nums.size() - k; i++) {
            int max_num = INT_MIN;
            for (int j = i; j < i + k; j++)
                max_num = max(max_num, nums[j]);
            ans.push_back(max_num);
        }
        return ans;
    }
};

思路 2:优先队列

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        int n = nums.size();
		if (k > n)
			return {};
			
        priority_queue<pair<int, int>> pq;
        for (int i = 0; i < k; i++)
            pq.push({nums[i], i});

        vector<int> ans;
        ans.push_back(pq.top().first);
        
        for (int i = k; i < n; i++) {
            pq.push({nums[i], i});
            while (!pq.empty() && pq.top().second <= i - k)
                pq.pop();
            ans.push_back(pq.top().first);
        }

        return ans;
    }
};

思路 3:双端队列

class Solution {
public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        deque<int> dq;
        vector<int> ans;
        for (int i = 0; i < nums.size(); i++) {
            if (!dq.empty() && dq.front() == i - k)
                dq.pop_front();
            while (!dq.empty() && nums[dq.back()] < nums[i])
                dq.pop_back();
            dq.push_back(i);
            if (i >= k - 1)
                ans.push_back(nums[dq.front()]);
        }
        return ans;
    }
};

76. 最小覆盖子串

思路 1:滑动窗口 + 哈希表

class Solution {
public:
    string minWindow(string s, string t) {
        int sLen = s.length(), tLen = t.length();
        if (sLen < tLen)
            return "";

        unordered_map<char, int> sCount, tCount;
        for (char& c : t)
            tCount[c]++;

        auto isCovered = [&]() -> bool {
            for (auto& [c, cnt] : tCount)
                if (sCount[c] < cnt)
                    return false;
            return true;
        };

        int start = -1, len = INT_MAX;
        for (int left = 0, right = 0; right < sLen; right++) {
            sCount[s[right]]++;
            while (isCovered()) {
                if (right - left + 1 < len) {
                    start = left;
                    len = right - left + 1;
                }
                sCount[s[left]]--;
                left++;
            }
        }

        return start == -1 ? "" : s.substr(start, len);
    }
};
华为云Stack应急预案实战:从IaaS到PaaS的故障场景与恢复指南 本文详细解析华为云Stack应急预案在IaaS到PaaS层的故障场景与恢复实践,涵盖计算节点故障、存储链路中断等典型问题。通过标准化操作流程和实战案例,帮助企业在突发故障时快速恢复业务,确保高可用性。华为云Stack的应急预案体系经过金融、政务等严苛场景验证,恢复时间指标(RTO)控制在30分钟以内。 阅读详情

相关推荐

EVE-NG 新增 qcow2 镜像教程

本文介绍了如何在 EVE-NG 网络仿真平台中添加 QCOW2 镜像并配置 YML 文件。首先,用户需要了解 EVE-NG 的目录结构,上传并重命名 QCOW2 镜像,然后设置文件权限并刷新界面以识别设备。接着,讲解了 YML 文件的作用,它用于定义设备的CPU、内存、网卡等参数,并给出了配置示例。若有多个设备版本,可以通过复制并重命名 YML 文件使其独立显示。最后,通过检查 QEMU 进程和日志验证 YML 配置是否生效。总结部分强调了 EVE-NG 的自动识别机制以及独立管理设备版本的方式。

qq_41862216的博客 3075

力扣hot100:字串:最小覆盖子串

这道题目,首先需要想清楚怎么样才能获得覆盖字串,首先初始左右指针形成一个窗口,然后移动右指针进行扩展。这时候已经找到了所有的所需要的字符了,那么就应该尝试缩小窗口,右指针需要动吗?显然右指针指向的地方才正好使得窗口含有所有的所需要字符,所以右指针不需要动,这时候应该左指针右移,右移到什么地步呢?是直到窗口含有所有的字符还是直到窗口已经不满足覆盖字串的要求呢?显然,需要找到下一个满足覆盖字串的窗口(也就是全新的左右指针),所以应当移动到正好窗口不满足覆盖字串这个要求。

2401_82379797的博客 311

Cisco思科 电子科技大学计算机网络 SRWE 期末技能考试 (PTSA)

电子科技大学2024春_SRWE_计算机网络系统 SRWE 期末技能考试 (PTSA)

2301_76745065的博客 5094

LeetCode HOT100刷题笔记(三):子串,矩阵

ps:笔记和代码按本人理解整理,重思路

学习记录 1266

保姆级教程:5分钟搞定微信小程序live-player组件接入监控视频流

本文提供了一份详细的微信小程序接入实时监控视频流的实战指南。文章对比了live-player与video组件的核心差异,重点解析了如何申请并开通live-player组件的严格权限,并提供了播放RTMP流(低延迟)的完整配置、状态监听与错误处理代码。同时,也介绍了使用video组件播放HLS流的备选方案,帮助开发者根据项目需求快速选择并实现稳定可靠的监控视频播放功能。

open4的博客 296

Python的WNTR库---基于供水网络

WNTR使用小结(一) 本人最近主要再做设施网络的内容,主要聚焦供水管网(water distribution network,WDN),在做实验中主要用的包为WNTR,下载连接: 链接: WNTR.最好安装最新版本 如果有做这方面研究的小伙伴们需要测试数据可以直接从WNTR实例数据中下载,其中提供了四种规模大小的管网,格式为.inp,可以搭配Epanet使用。如果需要更多示例数据可私信我! 以下内容全部为本人自己探索的小心得,希望能给你带来一点点帮助,如果不够详尽可以自行参阅官方文档:链接: 官方文档.

pushhy的博客 4934

动态规划:力扣hot100 最长回文子串

链接:https://programmercarl.com/0647.%E5%9B%9E%E6%

woaiMATLABbai的博客 378

Mac上Ollama服务IP访问失败的3种修复方法(含永久生效配置)

本文详细介绍了Mac上Ollama服务IP访问失败的3种修复方法,包括临时环境变量覆盖、永久Shell配置修改及进阶排查技巧。重点解析了OLLAMA_HOST环境变量的配置原理,帮助开发者解决Connection refused问题,实现局域网IP访问Ollama服务的需求。

weixin_29209805的博客 206

力扣HOT100之子串:76. 最小覆盖子串

有点像,然后就依葫芦画瓢写了一部分,但是还是没有想到额外定义一个左右指针来维护最短子串的左右端点的下标,这里把这个思路具体说下。中对应的字符个数),如果涵盖了,就说明当前滑动窗口已经找到了符合要求的子串,如果该子串的长度(循环结束后,我们需要判断s是否真的满足涵盖条件,如果自始至终都不满足,那么。分别代表最终的最短子串的起点下标和终点下标,在初始状态下,令。,就一直循环记录结果,当不再涵盖时,再进行下一次。,此时直接返回空字符串即可,否则就返回s字符串中。中的字符,然后我们先将右指针指向的字符计入。

weixin_52151595的博客 542

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

大学计算 - 方程求解 实训答案 第3关

【代码】大学计算 - 方程求解 实训答案 第3关。

2403_89314916的博客 107

LeetCode 热题 HOT100(三):子串进阶与普通数组(Go 实现)

(欢迎来访)✨本文覆盖力扣「热题 100」学习计划第题,全部使用实现。第 10 题「和为 K 的子数组」见上一篇;本篇从滑动窗口最大值开始。

lihaoweiwudi_的博客 551

华为OD机试真题 新系统 9月20号 【字符串分组求和】

华为OD新系统机试真题【字符串分组求和】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串分组求和】解析。

qq_45776114的博客 623

力扣HOT100之多维动态规划:5. 最长回文子串

这道题属于动态规划板块,但是我感觉这道题用动态规划相当晦涩难懂,看了一圈题解发现还是最好用,感觉这道题没有必要为了动态规划而动态规划,中心扩散法我感觉讲得很不错,非常通俗易懂,代码风格也很好,可以去看看他的视频。这道题就不用动态规划来做了,以后笔试面试遇到这道题就直接用了。

weixin_52151595的博客 495

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

力扣Hot100题目解析:最小覆盖子串(滑动窗口+哈希表详细注释)

滑动窗口结合哈希表是处理字符串区间问题的经典技巧。这类题型要学会窗口的扩展与收缩,以及如何判定窗口状态。文章标签:力扣,Hot100,最小覆盖子串,滑动窗口,哈希表,Java,算法,字符串,面试题。

weixin_46532327的博客 393

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode-hot100-子串:560和为 K 的子数组-239滑动窗口最大值-76最小覆盖子串

子串:560和为 K 的子数组-239滑动窗口最大值-76最小覆盖子串

XSYaaaaan的博客 417

前端力扣刷题 | 4:hot100之 子串

560. 和为K的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。

2502_90366796的博客 304

力扣hot100:子串:560.和为k的子数组

而本题目要求我们在一个数组里找到是否有和为k的子数组,那么这个k不就等于上面这个公式吗,也就是前缀和,将公式变形,preSum[j] - k = preSum[i - 1],也就是说我们只需要找到HashMap中是否存在preSum[j] - k ,如果有就相当于这个前缀和的式子是成立的,说明有子数组和为k,但不需要去纠结是否那个和为k的区间在哪。注意:需要提前将前缀和为0 put进HashMap,方便计算,因为假如你此时的preSum就是k,那么preSum - k = 0,此时也是满足条件的。

2401_83606094的博客 211

力扣HOT100之子串:560. 和为 K 的子数组

然后再来看题意,题目要求和为k的连续子数组的个数,我们只需要找到这样一对。加入到哈希表中,顺序不能颠倒,否则可能会出现自己被加到结果中(k = 0)的情况。的个数即可(必须是左侧的,不包含自己),然后将对应的结果累加到result中,这道题依然是不会啊,去看了灵神的题解才做出来的,这里讲一下详细的思路。的个数我们用哈希表来统计。为了降低运算的次数和时间复杂度,我们需要定义一个数组。的个数累加到result中,再将当前遍历到的。即可,然后我们再将符合条件的。的所有元素之和,其中,数组的时候,只需要统计。

weixin_52151595的博客 245

LeetCode 热题 HOT 100 第5天: “最长回文子串”

继续刷LeetCode 热题 HOT 100 的题目,并且在博客更新我的solutions。在csdn博客中我会尽量用文字解释清楚,相关Java代码大家可以前往我的个人博客jinhuaiyu.com中查看。 今天的题目有多种解法,但我一开始也只想出动态规划,为了进一步了解大佬们的思路,又学习了中心扩展和“马拉车”(Manacher 算法)。最后一种能够达到O(n)的复杂度,但是异常的难(对我现在来说),但是我还是尽量取理解了官方给的代码代码。 时间:2022.1.8 题目:最长回文子串 给你一个字符串 s,

qq_40967164的博客 407

【力扣hot100:76. 最小覆盖子串】

由英文字母组成,所以我们可以创建cnt数组统计字符个数,然后可以用枚举的方式来做判断。这道题的目的是找s中最短窗口的子串,这个子串要包含t中的所有字符,这个题可以使用滑动窗口来做。方法遍历的是字符集(A-Z, a-z),共 52 次,所以。如果这篇文章对你有帮助,欢迎。你们的支持是我前进的动力!次,所以总的时间复杂度是。综上分析总的时间复杂度是。

DdigitalNomad的博客 333

【力扣hot100】子串专题:暴力、前缀和、滑动窗口与单调队列

本文介绍了三个子串相关算法题的解题思路: 和为K的子数组(560题): 暴力解法通过双重循环枚举所有子数组,时间复杂度O(n²) 优化解法使用前缀和+哈希表,将问题转化为查找pre[j-1]=pre[i]-k,时间复杂度O(n) 滑动窗口最大值(239题): 使用单调队列维护窗口内的递减序列 队列头始终是当前窗口最大值,通过淘汰不可能成为最大值的元素来优化 最小覆盖子串(76题): 滑动窗口经典应用,右扩找可行解,左缩找最优解 使用双指针和哈希表统计字符出现次数,确保窗口涵盖目标字符串的所有字符 这些题目展

2401_87144364的博客 277

力扣HOT100之子串:239. 滑动窗口最大值

感觉自己当时写的逻辑比较通俗易懂,这一次我看的灵神的题解,也是用单调队列做出来的,但是不像上一次定义了那么多函数,但是感觉不如上一次的思路好懂。窗口长度有限,在经历上一步之后,队列中的元素个数可能超出窗口大小,所以需要对队列中的元素个数进行判断,由于加入的是第i个元素,因此我们直接判断。时才会触发这个结果,由于队首元素就是队列内的最大值,因此我们直接将队首中存储的下标对应的元素存入结果向量即可。二是判断队尾元素是否。右端元素,若满足,则需要不断将队尾元素弹出,直到队尾元素。若满足,则需要将队首元素弹出。

weixin_52151595的博客 494

力扣hot100(子串)

我们可以用一个哈希表表示 t 中所有的字符以及它们的个数,用一个哈希表动态维护窗口中所有的字符以及它们的个数,如果这个动态表中包含 t 的哈希表中的所有字符,并且对应的个数都不小于 t 的哈希表中各个字符的个数,那么当前的窗口是「可行」的。由于我们需要求出的是滑动窗口的最大值,如果当前的滑动窗口中有两个下标 i 和 j,其中 i 在 j 的左侧(i

weixin_73787068的博客 991

【LeetCode HOT100 】:最小覆盖子串——滑动窗口的经典应用题解

valid的含义:代表已满足数量要求的字符种类数,而非字符总数。当某字符的窗口计数恰好等于需求计数时才增加valid。窗口收缩条件:必须使用while而非if,因为收缩后窗口可能仍然满足覆盖条件,需要持续收缩。边界处理:当min_len仍为无穷大时,返回空字符串。字符重复处理t中可能包含重复字符(如"aa"),需要确保窗口中有至少两个'a'。

Mr_pyx的博客 368

LeetCode 热题 HOT 100 第32天:“最小覆盖子串”

继续刷LeetCode 热题 HOT 100 的题目,并且在博客更新我的solutions。在csdn博客中我会尽量用文字解释清楚,相关Java代码大家可以前往我的个人博客jinhuaiyu.com中查看。 题目:最小覆盖子串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子串,我们保证它是

qq_40967164的博客 143

day11 leetcode-hot100-13(普通数组1)ps:子串

(1)设置一个数组f,数组f的每个位置,代表以该数为最后1位的最大子串和。(2)最后取f(i)的最大值即可。这个题目是比较典型的动态规划。也是代表子串的一个形式。

m0_62948824的博客 243
上一篇: LeetCode Hot 100:滑动窗口
下一篇: LeetCode Hot 100:二叉树
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值