含详细解析题解
2025-11-08 09:44:16
发布于:广东
0阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
string s;
int c[128];
int main() {
cin >> s;
for (int i = 0; i < s.size(); i++) c[s[i]]++;
long long t = 0;
for (int i = 0; i < 128; i++) if (c[i]) t += (long long)c[i] * i;
cout << t;
return 0;
}
代码逻辑说明:
1.头文件与全局变量:
#include <bits/stdc++.h>包含了所有标准库,无需单独引入string和iostream- 全局变量
string s用于存储输入字符串,int c[128]用于统计字符出现次数(默认初始化为 0)
2.核心流程:
- 读取输入字符串到
s中 - 遍历字符串每个字符:
c[s[i]]++,利用字符 ASCII 码作为数组下标,统计每个字符出现次数(例如'a'的 ASCII 码是 97,c[97]就记录'a'的出现次数) - 计算总价值:遍历计数数组
c,对每个出现过的字符(c[i]>0),累加次数×ASCII码值(即c[i] * i),结果存放在long long t中(避免大数值溢出) - 输出总价值
t
3.为什么适合该题目
时间复杂度为O(n)(n为字符串长度),高效处理级别的输入
空间复杂度O(1)(数组大小固定为 128),占用内存少
直接利用字符 ASCII 码特性统计,逻辑简洁,计算准确
例如输入aaabb时:
c[97]会被统计为 3('a' 出现 3 次)
c[98]会被统计为 2('b' 出现 2 次)
总价值计算为3*97 + 2*98 = 291 + 196 = 487,与样例结果一致
代码完全满足题目需求,且简洁高效。
!感谢豆包的支持!
这里空空如也







有帮助,赞一个