0
点赞
收藏
分享

微信扫一扫

剑指48:最长不含重复字符的子字符串

成义随笔 2022-03-11 阅读 35
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()<=1)
            return s.size();        
        unordered_map<char,int> hashmap; // hashmap里存放的是上一次遇到该字符的位置
        int left=-1;
        int res=0;
        for(int i=0;i<s.size();i++){
            if(hashmap.find(s[i])!=hashmap.end()){//hash有值,表示前面有该字符,但该字符是否在left到i中影响长度
                left=max(hashmap[s[i]],left);
    //若hashmap[s[i]]>left,说明该字符在left到i里,那么说明当前长度中有重复,目前不重复长度为 i-该字符上一次位置   
    //若hashmap[s[i]]<left,说明该字符不在left到i里,当前长度left到i依然没有重复,所以无论如何取大的一个值
            } 
            hashmap[s[i]]=i;
            res=max(res,i-left);
        }
        return res;
    }
};
举报

相关推荐

0 条评论