Leetcode-- 最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
 

提示:

s.length <= 40000

思路

参考Leetcode题解 中的双指针滑动窗口方法

大致思路是:保证窗口中不会存在重复的字符

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 边界判断
        if(s.length()< 2) return s.length();

        int maxLen= 0;
        map<char, int> mp;
        int len= s.length();
        int l= 0;
        for(int i= 0; i< len; i++){
            // 如果该字符之前已经出现过,并且位置在l后面,则将l移动,保证窗口中没有重复字符
            if(mp.find(s[i])!= mp.end()){
                auto it= mp.find(s[i]);
                l= l> it->second? l: it->second+ 1;
            }
            mp[s[i]]= i;
            maxLen= maxLen> i- l+ 1? maxLen: i- l+ 1;
        }
        return maxLen;
    }
};
发布了208 篇原创文章 · 获赞 28 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_41879093/article/details/105297581