无重复子串
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
int left = 0;
int ans = 0;
unordered_map<char,int>hash;
for(int right = 0;right<n;right++){
hash[s[right]]++;
if(right-left+1==hash.size())ans = max(ans,right-left+1);
while(right-left+1>hash.size()){
hash[s[left]]--;
if(!hash[s[left]])hash.erase(s[left]);
left++;
}
}
return ans;
};
};
删除子数组的最大得分
class Solution {
public:
int maximumUniqueSubarray(vector<int>& nums) {
int n = nums.size();
int ans = 0;
int left = 0;
unordered_map<int,int>hash;
int sum =0;
for(int right=0;right<n;right++){
sum += nums[right];
hash[nums[right]]++;
if(right-left+1==hash.size())ans = max(ans,sum);
while(right-left+1>hash.size()){
hash[nums[left]]--;
if(!hash[nums[left]])hash.erase(nums[left]);
sum -= nums[left];
left++;
}
}
return ans;
}
};
长度最小的子数组
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
int ans = INT_MAX;
int n = nums.size();
int left =0;
int sum = 0;
for(int right=0;right<n;right++){
sum += nums[right];
while(sum>=target){
ans = min(ans,right-left+1);
sum -=nums[left];
left++;
}
}
return ans==INT_MAX?0:ans;
}
};