题目描述
对于一个字符串S,我们定义S 的分值 f(S) 为S中恰好出现一次的字符个数。例如f (”aba”)=1,f (”abc”)=3, f (”aaa”)=0。
现在给定一个字符串S[0…n-1](长度为n),请你计算对于所有S的非空子串S[i…j](0 ≤ i ≤ j < n), f (S[i… j]) 的和是多少。
【输入格式】
输入一行包含一个由小写字母组成的字符串S。
【输出格式】
输出一个整数表示答案。
【样例输入】
ababc
【样例输出】
21
【样例说明】
子串f值:
a 1
ab 2
aba 1
abab 0
ababc 1
b 1
ba 2
bab 1
babc 2
a 1
ab 2
abc 3
b 1
bc 2
c 1
【评测用例规模与约定】
对于20% 的评测用例,1 ≤ n ≤ 10;
对于40% 的评测用例,1 ≤ n ≤ 100;
对于50% 的评测用例,1 ≤ n ≤ 1000;
对于60% 的评测用例,1 ≤ n ≤ 10000;
对于所有评测用例,1 ≤ n ≤ 100000。
代码
#include<iostream>#include<string>#include<cstring>usingnamespace std;intfun(string s){int table[256]={0};int num =0;for(int i =0; i < s.size(); i++){
table[s[i]]++;}for(int i =0; i <256; i++){if(table[i]==1)
num++;}return num;}intmain(){
string str;
cin >> str;int n = str.size();int ans =0;for(int i =0; i <n; i++){for(int j = i; j <n; j++){
string sub = str.substr(i,j-i+1);
ans +=fun(sub);}}
cout << ans <<endl;return0;}