思路:双指针/滑动窗口
分析:我们固定一段区间 (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) 回帖