classSolution {public:
intmaximumUniqueSubarray(vector<int>& nums){
int n = nums.size();
unordered_set<int> st;
int left =0;
int res =0,sum=0;
for(int i =0;i<n;i++){
while(st.find(nums[i])!=st.end()){
st.erase(nums[left]);
sum-=nums[left];
left++;
}
st.insert(nums[i]);
sum+=nums[i];
res=max(res,sum);
}
return res;
}
};
classSolution {public:
intequalSubstring(string s, string t, int maxCost){
int res = 0;
int n = s.length();
int a[n];
vector<int> b(n,0);
for(int i =0;i<n;i++){
a[i]=abs(s[i]-t[i]);
}
int left=0,len=0;
for(int i = 0;i<n;i++){
b[i]=a[i];
maxCost-=a[i];
len++;
while(maxCost<0){
maxCost+=b[left];
left++;
len--;
}
res=max(res,len);
}
return res;
}
};
classSolution {public:
intmaxSatisfied(vector<int>& customers, vector<int>& grumpy, int minutes){
int n = customers.size();
int sum = 0;
int res=0;
vector<int> v;
for(int i =0;i<n;i++){
if(grumpy[i]==0) sum+=customers[i];
else{
v.push_back(i);
}
}
int left = 0;
for(int i =0;i<v.size();i++){
while(v[i]-v[left]>=minutes){
sum-=customers[v[left]];
left++;
}
sum+=customers[v[i]];
res=max(res,sum);
}
res=max(res,sum);
return res;
}
};
classSolution {public:
vector<int> findSubstring(string s, vector<string>& words){
unordered_map<string, int> allWordsMap;
for (auto& v : words) {
allWordsMap[v]++;
}
int num = words.size();
int onelen = words[0].length();
vector<int> res;
if (s.length() < num * onelen) {
return res;
}
for (int left = 0; left < s.length() - num * onelen + 1; ++left)
{
unordered_map<string, int> nowWordsMap;
int right = left;
while (right < left + num * onelen) {
auto cur = s.substr(right, onelen);
if (allWordsMap.find(cur) == allWordsMap.end()
|| nowWordsMap[cur] == allWordsMap[cur]) {
break;
}
++nowWordsMap[cur];
right += onelen;
}
if (right == left + num * onelen) {
res.push_back(left);
}
}
return res;
}
};