思路:通过计算每个字母对于新子串的贡献度来计算
class Solution {
public:
int uniqueLetterString(string s)
{
int n=s.size();
vector<int>cur(26,-1);//存放当前元素
vector<int>last(26,-1);//存放前一个相同元素
int ans=0;
for(int i=0;i<n;i++)
{
int index=s[i]-'A';
if(cur[index]>-1) //处理有相同的元素的贡献值
{
ans+=(i-cur[index])*(cur[index]-last[index]);
}
last[index]=cur[index];
cur[index]=i;
}
for(int i=0;i<26;i++) //处理每个元素的贡献值
{
if(cur[i]>-1)
{
ans+=(cur[i]-last[i])*(n-cur[i]);
}
}
return ans;
}