LeeCode题目笔记

×2019-11-20 无重复字符的最长子串

2019-11-20  本文已影响0人  Antrn

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

示例 1:

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

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

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

C++1 超时!
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map<char, int> um;
        int num=0,max_=0;
        for(int i=0;i<s.length();i++){
            if(um.count(s[i])<=0){
                um.insert(make_pair(s[i], i));
                num++;
            }else{
                // max_ = num>max_?num:max_;
                if(num>max_){
                    max_ = num;
                }
                if(um[s[i]] == i-1){
                    num=1;
                    um.clear();
                    um.insert(make_pair(s[i], i));
                }else{
                    num=i-um[s[i]];
                    int a = um[s[i]];
                    for(int j=0;j<=a;j++){
                        if(um[s[j]]<a){
                            um.erase(s[j]);
                        }
                    }
                    um[s[i]]=i;
                }        
            }
        }
        if(num>max_){
            max_ = num;
        }
        // max_ = num>max_?num:max_;
        return max_;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读