提交时间:2024-10-04 14:23:25
运行 ID: 33111
#include<bits/stdc++.h> using namespace std; pair<int,int>app[30]; char ch[5000010]; int nn[30]; int flag[30]; pair<int,int>v[30]; int len=0; signed main(){ //freopen("string.in","r",stdin); //freopen("string.out","w",stdout); ios::sync_with_stdio(0); memset(nn,0,sizeof(nn)); cin>>ch; for(int i=0;i<30;i++)app[i].first=app[i].second=0; int n=strlen(ch); for(int i=n;i>=1;i--){ ch[i]=ch[i-1]; flag[ch[i]-'a']=1; } int aa=0; for(int i=0;i<26;i++)if(flag[i])aa++; if(n<=18500){ int ans=0; for(int i=1;i<=n;i++){ memset(flag,0,sizeof(flag)); for(int j=1;j<i;j++){ flag[ch[j]-'a']++; } int _1=0; for(int j=0;j<26;j++)if(flag[j]==1)_1++; for(int j=1;j+i-1<=n;j++){ if(flag[ch[j+i-1]-'a']==0)_1++; else if(flag[ch[j+i-1]-'a']==1)_1--; flag[ch[j+i-1]-'a']++; if(_1)ans++; if(flag[ch[j]-'a']==2)_1++; else if(flag[ch[j]-'a']==1)_1--; flag[ch[j]-'a']--; } } cout<<ans; }else{ long long ans=0; for(int i=1;i<=n;i++){ int k=ch[i]-'a'; app[k].first=app[k].second; app[k].second=i; len=0; for(int j=0;j<26;j++){ v[++len]=make_pair(app[j].first+1,app[j].second); } int sum=0; sort(v+1,v+1+len); pair<int,int> now=v[1]; for(int j=2;j<=len;j++){ if(now.second<v[j].first){ sum+=(now.second-now.first+1); now=v[j]; }else{ now.first=min(now.first,v[j].first); now.second=max(now.second,v[j].second); } } sum+=(now.second-now.first+1); ans+=sum; } cout<<ans; } return 0; }