3.无重复字符的最长子串 2

3.无重复字符的最长子串

思路:滑动窗口

在 C++ 中,std::unordered_map 是一个哈希表实现的关联容器,用于存储键值对。要在 std::unordered_map 变量中查找特定的键,可以使用 find() 成员函数

find() 函数返回一个迭代器,指向要查找的键值对。如果键存在于 std::unordered_map 中,则迭代器指向该键值对;否则,迭代器指向 std::unordered_map::end()。

滑动窗口模版

//外层循环扩展右边界,内层循环扩展左边界
for (int l = 0, r = 0 ; r < n ; r++) {
	//当前考虑的元素
	while (l <= r && check()) {//区间[left,right]不符合题意
        //扩展左边界
    }
    //区间[left,right]符合题意,统计相关信息
}

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map<int,int>hash;
        int i=-1;//左指针,字符串开头的前一个位置,所以最后取j-i是长度
        int res=0;
        for(int j=0;j<s.size();j++){//枚举右指针
            if(hash.find(s[j])!=hash.end()){//找到了,哈希表中出现过,移动左指针
                i=max(i,hash[s[j]]);//取max是保证左指针不会回退
            }
            hash[s[j]]=j;//记录/更新哈希表
            res=max(res,j-i);
        }
        return res;
    }
};

对于max的举例

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值