提交时间:2024-10-04 19:26:32
运行 ID: 33281
#include<bits/stdc++.h> using namespace std; const int N=5e6+10; int ans=0; string s; //lst:上一个和上上个这个字符出现在哪里 struct Lst{int l,r;}t[30],txt[30]; bool cmp(Lst x,Lst y){ if(x.l!=y.l)return x.l<y.l; else return x.r<y.r; } signed main(){ cin>>s; // cout<<s<<endl; int n=s.length();s='0'+s; for(int i=1;i<=n;i++){ // for(int j=0;j<2;j++)cout<<t[j].l<<" "<<t[j].r<<endl; for(int j=0;j<26;j++){ if(j!=s[i]-'a')txt[j]=t[j]; else txt[j]={0,0}; } sort(txt,txt+25,cmp); int last=0; for(int j=0;j<26;j++){ if(txt[j].r<=last)continue; if(txt[j].l<=last){ans+=txt[j].r-last;last=txt[j].r;} else{ans+=txt[j].r-txt[j].l+1;last=txt[j].r;} } t[s[i]-'a'].l=t[s[i]-'a'].r; t[s[i]-'a'].r=i; ans+=1; // cout<<endl; } cout<<ans<<endl; return 0; }