首页 > 【牛客题霸每日一题】NC41 最长无重复子串 C++ 题解
头像
BNDSBilly
编辑于 2020-12-14 15:06
+ 关注

【牛客题霸每日一题】NC41 最长无重复子串 C++ 题解


思路:双指针/滑动窗口
分析:我们固定一段区间 (i, j),记录该区间内所有数组元素的出现次数。每次 j++,并将其对应的数组元素对应次数加1,若该元素出现次数大于1,说明之前出现过,则左指针右移:i++,直到满足所有元素出现次数都等于1,此时(i, j) 区间为一个满足条件的子串,更新最大子串长度即可。

代码如下:
class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        // write code here
        int ans = 1, cur = 1, i = 0, j = 0;
        int n = arr.size();
        unordered_map<int, int> mp;
        while(j < n) {
            mp[arr[j]]++;
            while(mp[arr[j]] > 1) {
                mp[arr[i]]--;
                i++;
            }
            ans = max(ans, j - i + 1);
            j++;
        }
        return ans;
    }
};


全部评论

(0) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐