题目描述
对于一个字符串 SS,我们定义 SS 的分值 f(S)f(S) 为 SS 中恰好出现一次的字符个数。例如 f(aba) = 1,f(abc) = 3, f(aaa) = 0f(aba)=1,f(abc)=3,f(aaa)=0。
现在给定一个字符串 S_{0 \cdots n − 1}S0⋯n−1(长度为 nn,1 \leq n \leq 10^51≤n≤105),请你计算对于所有 SS 的非空子串 S_{i \cdots j}(0 ≤ i ≤ j < n)Si⋯j(0≤i≤j<n),f(S_{i \cdots j})f(Si⋯j) 的和是多少。
输入描述
输入一行包含一个由小写字母组成的字符串 SS。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
ababc
输出
21
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin >> str;
int n = str.size();
int ans = 0;
for(int i = 0; i < n; i++){
int left = 1, right = 1;
while( i - left >= 0 && str[i - left] != str[i]) left++;
while( i + right < n && str[i + right] != str[i]) right++;
//cout << left << " " <<right << endl;
ans += left * right;
//cout << ans << endl;
}
cout << ans << endl;
return 0;
}