解题思路
记录每个字母上一次的下标,累加贡献;
设定贡献为一个字母在子字符串第一次出现时产生贡献,后续重复出现不贡献;
则每次贡献为 左边有 i - lastpos 种选法,右边有 n - i 种选法;
初始位置设为-1;
代码
class Solution {
public:
long long appealSum(string nums) {
vector<int> lastpos(26, -1);
long long sum = 0;
for (int i = 0; i < nums.size(); i++) {
sum += (nums.size() - i) * (i - lastpos[nums[i] - 'a']);
lastpos[nums[i] - 'a'] = i;
}
return sum;
}
};