class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.length(),ans=0,left=0;
unordered_map<char,int> w;
for(int i=0;i<n;i++)
{
char c=s[i];
while(w[c])w.erase(s[left++]);
w[c]++;
ans=max(ans,i-left+1);
}
return ans;
}
};
1493:删除一个元素以后全为1的最长子数组
class Solution {
public:
int longestSubarray(vector<int>& nums) {
int ans=0; int tag=0;
int left=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==0)
{
if(tag)
{ while(nums[left])left++;
tag--;left++;}
tag++;
}
ans=max(ans,i-left);
}
return ans;
}
};
class Solution {
public:
int longestSemiRepetitiveSubstring(string s) {
int ans=1;int left=0;
int n=s.size(); int num=0;
for(int i=1;i<n;i++)
{
if(s[i]==s[i-1])num++;
if(num>1)
{
for(left++;s[left]!=s[left-1];left++);
num=1;
}
ans=max(ans,i-left+1);
}
return ans;
}
};
class Solution {
public:
int totalFruit(vector<int>& fruits) {
unordered_map<int,int> m;
int l=fruits.size();
int ant=0,ma=0;
for(int i=0,j=0;i<l;i++)
{
m[fruits[i]]++;
ant++;
while(m.size()>2){m[fruits[j]]--;ant--;
if(m[fruits[j]]==0)m.erase(fruits[j]);j++;
}
ma=max(ma,ant);
}
return ma;
}
};
class Solution {
public:
int maximumUniqueSubarray(vector<int>& nums) {
int ant=0,ma=0;
unordered_map<int,int> m;
for(int i=0,j=0;i<nums.size();i++)
{
m[nums[i]]++;
ant+=nums[i];
while(m[nums[i]]>1)
{
m[nums[j]]--;
ant-=nums[j];
j++;
}
ma=max(ant,ma);
}
return ma;
}
};
2958:最多K个重复元素的最长子数组
class Solution {
public:
int maxSubarrayLength(vector<int>& nums, int k) {
int ant=0,ma=0;
unordered_map<int,int> m;
for(int i=0,j=0;i<nums.size();i++)
{
m[nums[i]]++;
ant++;
while(m[nums[i]]>k)
{
ant--;
m[nums[j]]--;
j++;
}
ma=max(ma,ant);
}
return ma;
}
};
class Solution {
public:
int maxConsecutiveAnswers(string answerKey, int k) {
unordered_map<char,int> m;
int ant=0,ma=0;
for(int i=0,j=0;i<answerKey.size();i++)
{
m[answerKey[i]]++;
ant++;
while(m['T']>k&&m['F']>k)
{
ant--;
m[answerKey[j]]--;
j++;
}
ma=max(ma,ant);
}
return ma;
}
};
class Solution {
public:
int longestOnes(vector<int>& nums, int k) {
unordered_map<int,int> m;
int ma=0,ant=0;
for(int i=0,j=0;i<nums.size();i++)
{
m[nums[i]]++;
ant++;
while(m[0]>k)
{
m[nums[j]]--;ant--;
j++;
}
ma=max(ma,ant);
}
return ma;
}
};
class Solution {
public:
int longestSubarray(vector<int>& nums, int limit) {
int ant=0;
int len=nums.size();
multiset<int> s;
for(int i=0,j=0;i<len;i++)
{
s.insert(nums[i]);
while(*s.rbegin()-*s.begin()>limit)
{
s.erase(s.find(nums[j]));
j++;
}
ant=max(ant,i-j+1);
}
return ant;
}
};
class Solution {
public:
int longestNiceSubarray(vector<int>& nums) {
int ant = 0;
int a[35] = {0};
int len = nums.size();
for (int i = 0, j = 0; i < len; i++) {
int t = nums[i];
for (int k = 1; t; k++) {
if (t % 2)
a[k]++;
t >>= 1;
}
for (int k = 1; k < 35; k++) {
while (a[k] > 1) {
int b = nums[j];
for (int k = 1; b; k++) {
if (b % 2)
a[k]--;
b >>= 1;
}
j++;
}
}
ant = max(ant, i - j + 1);
}
return ant;
}
};