(改一下题目,双生串不限制只在中间位置分开,两边颜色各自统一,可以在任何位置分开)
可以用前缀和,时间复杂度: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; }
}