子串权值和
题目描述#
咕咕有一个长度为 的只包含小写字母的字符串,对于该字符串的任意一个子串,其权值定义为该子串中包含的字符种数。
你能告诉咕咕,该字符串的所有子串的权值之和是多少吗?
INPUT#
输入包含多组数据,第一行一个整数 ,表示输入数据的组数。
每组数据共 行,第一行一个字符串 ,长度为 。
OUTPUT#
对于每组数据,输出一行一个整数,表示该字
符串的所有子串的权值之和。
Sample Input:#
2
gugugu
ggguuu
Sample Output:#
36
30
数据范围#
思路#
注意到字符的种类只有 个,因此我们可以单独算出每个字符的贡献
可以发现每个字符在任意一个子串中的贡献只有两种 ,因此我们倒着算比较容易计算
对于一个字符 , 只有在一段连续的不包含 的字符串中才不会计算贡献,并且字符串个数是
CODE
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T; cin >> T;
while(T -- ) {
string s; cin >> s;
int n = s.size();
vector<int> a(n);
for(int i = 0; i < n; i ++ ) {
a[i] = (s[i] - 'a');
}
long long ans = 0;
for(int k = 0; k < 26; k ++ ) {
for(int i = 0; i < n; i ++ ) {
while(i < n && a[i] == k) i ++;
int j = i;
while(j < n - 1 && a[j + 1] != k) j ++;
long long len = j - i + 1;
ans += len * (len + 1) / 2;
i = j;
}
}
ans = 1LL * n * (n + 1) * 13 - ans;
cout << ans + 1 << "\n";
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!