C++——最长无重复子串(中等题)

优化的滑动窗口思想:当我们找到重复的数字时,我们可以立即跳过该窗口。即当在哈希表中发现存在该数字时,left直接跳到重复数字的下一位,通过取当前left值和哈希表中该数字所对应的值两者之间的最大值,实现跳到最大重复字符的下一位。例如45665674这样一个数组,当我们遍历到第二个6时,发现哈希表中存在key为6的,更新left的值为3(即键值key为6对应的值value为3),则指向重复数字的下一位(数组中第二个6的位置),这样窗口不用一个个滑动,对于5来说,因为比较left值大小,若小于则不用更新窗口左值。结合代码看就会明白。

注:哈希表的键key对应数组或字符串的值(而不是下标索引),哈希表的值value对应数组或字符串的下标+1。

代码如下:(如果处理的是字符串,则将map的键值类型改为char即可,即map<char,int>a)方法是一样的。

class Solution {
public:
    int maxLength(vector<int>& arr) {
        if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值