题目链接:无重复字符的最长子串

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

方法一:暴力?

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int ans = 0;
        
        for (int i = 0;i < s.size();i++) {
            unordered_set<char> occ;
            int num = 1;
            occ.insert(s[i]);
            for (int j = i+1;j < s.size();j++) {
                if (!occ.count(s[j])) {
                    occ.insert(s[j]);
                    num++;
                }else break;
            }
            ans = max(ans,num);
        }
        return ans;
    }
};

方法二:滑动窗口

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> occ;
        int i = 0;
        int ans = 0;
        int n = s.size();
        for (int j = 0;j < n;j++) {
            while (i < j && occ.count(s[j]) != 0) {
                occ.erase(s[i++]);
            }
            occ.insert(s[j]);
            ans = max(ans,j-i+1);
        }
        return ans;
    }
};

标签: hot100, Medium, 滑动窗口

添加新评论