AcWing 2868. 子串分值
原题链接
中等
作者:
灵茶气艾福
,
2021-04-18 00:08:48
,
所有人可见
,
阅读 408
#include <bits/stdc++.h>
using namespace std;
vector<int> a[30];
string str;
long long res;
int main(){
cin>>str;
int len=str.length();
for(int i=0;i<str.length();i++){
a[str[i]-'a'].push_back(i);
}
for(int i=0;i<30;i++){
if(a[i].size()>0){
int l=0,r=0;
for(int j=0;j<a[i].size();j++){
if(j-1<0){
l=a[i][j];
}
else l=a[i][j]-a[i][j-1]-1;
if(j+1>=a[i].size()){
r=len-a[i][j]-1;
}
else r=a[i][j+1]-a[i][j]-1;
res=res+l+r+1ll*l*r;
}
}
}
cout<<res+len;
}