#include <bits/stdc++.h>
#define ve vector
#define ar array
#define pb push_back
#define ins insert
#define endl '\n'
#define ll long long
using namespace std;
/*
Segment tree over most and least occuring character and subtract the least prefix that contains both using a pointer of last occurance.
Don't even need seg tree just keep pointer updates of min sum at each point of least character
*/
int main(){
int N;
string s;
cin >> N >> s;
int mx = 0;
int mdx[N];
int cnt[26];
int rm[26];
int p[26];
for(char a = 'a'; a <= 'z'; a++){
for(int i = 0; i < 26; i++){
cnt[i] = 0;
rm[i] = 0;
p[i] = -1;
}
for(int i = 0; i < N; i++){
if(s[i] == a){
for(int j = 0; j < 26; j++){
cnt[j]++;
if(p[j] == -1) continue;
mx = max(mx, cnt[j] - rm[j]);
}
}
else{
rm[s[i]-'a'] = min(rm[s[i]-'a'], cnt[s[i]-'a']);
cnt[s[i]-'a']--;
p[s[i]-'a'] = i;
mx = max(mx, cnt[s[i]-'a']);
}
}
}
cout << mx << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |