找规律,思维
先考虑不重复的情况abcde
在考虑重复的情况ababc
写一下找出规律就可以发现结论了
看代码
#include<iostream>
#include <string>
using namespace std;
int pre[100];
int main(){
string str;
cin >> str;
int len = str.length();
str = " " + str;
long long ans = 0;
for(long long i = 1;i<=len;i++){
ans += (i - pre[str[i]-'a']) * (len - i + 1); // *前面部分表示去重,pre记录上一次相同的字符出现的位置
pre[str[i]-'a'] = i;
}
cout << ans << endl;
return 0;
}