(改一下题目,双生串不限制只在中间位置分开,两边颜色各自统一,可以在任何位置分开)
可以用前缀和,时间复杂度:O(26*n) ,空间复杂度:O(26*n)
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+6;
int qsum[28][N],sum[28];
string s;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
sum[s[i]-'a']++;
for(int j=0;j<26;j++){
if(s[i]-'a'==j) qsum[j][i+1]=qsum[j][i]+1;
else qsum[j][i+1]=qsum[j][i];
}
}
// for(int i=0;i<26;i++){
// cout<<sum[i]<<" ";
// }
// cout<<endl;
int ans=N;
for(int i=0;i<s.size();i++){
int mal=0,mar=0;
for(int j=0;j<26;j++){
mal=max(mal,qsum[j][i+1]);
mar=max(mar,sum[j]-qsum[j][i+1]);
}
// cout<<mal<<" "<<mar<<endl;
int x=s.size()-mal-mar;
ans=min(ans,x);
}
cout<<ans;
return 0;
}
}

京公网安备 11010502036488号