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

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串"pwke" 是 子序列  而不是子串。

循环利用map,映射当前下标,没找到,push进去,找到了,break计算长度是否大于前面map长度最大值;从遇到重复元素的(map映射)下标n开始不包括n,清空map之后重复进行操作。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.length()==1||s.length()==0) return s.length();
        map<char,int>my_map;
        int l_max=0;
        int n=s.length();
        int i=0;
        for(;i<n;i++){
            if(!my_map.count(s[i])) {
                my_map[s[i]]=i;
                if(my_map.size()>=l_max) l_max=my_map.size();
            }
            else{
                i=my_map[s[i]];my_map.clear();
            }
        }
        return l_max;
    }
};

猜你喜欢

转载自blog.csdn.net/HeXiQuan123/article/details/80896101