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

本文探讨了如何求解字符串中最长的无重复字符子串问题,通过滑动窗口算法,详细解析了其核心思想与具体实现过程。利用C++代码示例,展示了如何运用unordered_map来跟踪字符位置,实现高效查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Example 1:

Input: "abcabcbb"
Output: 3 
Explanation: The answer is "abc", with the length of 3. 

Example 2:

Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.

Example 3:

Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3. 
             Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

 

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

### 解题思路

滑窗操作,i为右边界,left为左边界,实现效果为,i不断向右移,而左边界需要判断是否移动,判断依据为新入的元素是否存在于窗口中,若存在且比窗口左边界的指示值大则把左窗口的边界向右移动,移动依据为map中的映射。并且右移的同时不断得建立映射。而left=-1是为了指示左边界的左边一个值,所以为-1。并且存储一个res值记录大小。

 

### 代码

```cpp

class Solution {

public:

    int lengthOfLongestSubstring(string s) {

        int left=-1;int res=0;

        unordered_map<int,int> m;

        for(int i=0;i<s.size();i++)

        {

            if(m.count(s[i])&&m[s[i]]>left)

            {

            left=m[s[i]];

            }

            else

            {

            res=max(i-left,res);

            }

            m[s[i]] = i;

        }

        return res;

    }

};

参考资料:

https://www.cnblogs.com/grandyang/p/4480780.html 

https://www.cnblogs.com/ariel-dreamland/p/8668286.html   思路以及实现过程

https://blog.youkuaiyun.com/qq_34909804/article/details/103681865 map用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值