Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33240 | hi_hi | 【J】T4 | C++ | 通过 | 100 | 346 MS | 53200 KB | 736 | 2024-10-04 17:32:49 |
#include<bits/stdc++.h> using namespace std; int sum[27][5000001],ans;//sum[i][j]表示字母j在第i之前第一个出现的位置 string s; int main(){ cin>>s; long long n=s.length(); s=" "+s; for(int i=1;i<=n;i++){ for(int j=0;j<26;j++){ sum[j][i]=sum[j][i-1]; } sum[s[i]-'a'][i]=i; } for(int i=1;i<=n;i++){ vector<pair<int,int> > q; for(int j=0;j<26;j++){ int r=sum[j][i]; int l=sum[j][r-1]; l++; if(l<=r)q.push_back({l,r}); } sort(q.begin(),q.end()); int last=0; for(int j=0;j<q.size();j++){ int l=q[j].first,r=q[j].second; if(l>last){ ans+=r-l+1; } else if(r>last){ ans+=r-last; } last=max(last,r); } } printf("%lld",ans); }