试题 历届试题 子串分值和【第十一届】【省赛】【B组】

用arr数组存储每个字符出现的位置(初始化为-1)
 

a

-1

0 2
b -1 1 3
c -1 4

每个字符出现的次数 = (字符串的长度 - 该字符的当前位置) * (当前位置 - 该字符的上一个位置)

#include
using namespace std;
#include
#include
int main(){
    string buf;
    cin >> buf;
    long long sum = 0;
    int arr[26];//26个字母
    memset(arr, -1, sizeof(arr));
    for (int i = 0; i < buf.length(); i++) {
        sum += (buf.length() - i) * (i - arr[buf[i] - 'a']);
        arr[buf[i] - 'a'] = i;
    }
    cout << sum;
}

你可能感兴趣的:(蓝桥杯,c++)