思路 数据范围比较小 我们可以n方枚举区间 然后求一下字母前缀 然后更新最小值最大值即可
class Solution {
public:
int beautySum(string s) {
int a[505][26]={0};
for(int i=0;s[i];i++){
if(i==0){
a[0][s[i]-'a']++;
continue;
}
for(int j=0;j<26;j++){
if(s[i]-'a'==j)a[i][j]=a[i-1][j]+1;
else a[i][j]=a[i-1][j];
}
}
int sum=0;
for(int i=0;s[i];i++){
for(int j=2;j+i-1<s.size();j++){
string tep=s.substr(i,j);
int minn=INT_MAX,maxx=-1;
for(int k=0;k<26;k++){
if(i==0){
if(a[i+j-1][k]>0){
minn=min(minn,a[i+j-1][k]);
maxx=max(maxx,a[i+j-1][k]);
}continue;
}
if(a[i+j-1][k]-a[i-1][k]>0){
minn=min(minn,a[i+j-1][k]-a[i-1][k]);
maxx=max(maxx,a[i+j-1][k]-a[i-1][k]);
}
}
sum+=maxx-minn;
// cout<<tep<<" "<<maxx-minn<<" "<<maxx<<" "<<minn<<endl;
}
}
return sum;
}
};