(改一下题目,双生串不限制只在中间位置分开,两边颜色各自统一,可以在任何位置分开)

可以用前缀和,时间复杂度: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;
}

}