题目解析
* 输入输出:第一行输入整数 nnn 表示字符串长度,第二行输入字符串 TTT(仅含大小写字母)。输出一个整数,表示按规则计算得到的加密前整数。
* 数据范围:1≤n≤1051 \le n \le 10^51≤n≤105,字符串长度等于 nnn。
* 复杂度要求:需要线性扫描字符串,时间复杂度 O(n)O(n)O(n),空间复杂度 O(1)O(1)O(1)(不计字符串存储)。
* 算法知识点:字符串处理、字符类型判断、ASCII码运算
思路解析
1. 分类处理:遍历字符串中每个字符,根据大小写分别计算贡献值:
* 小写字母:利用 s[i] - 'a' + 1 计算其在字母表中的位置(a 对应 111,b 对应 222,依此类推)。
* 大写字母:直接取其 ASCII 码值的相反数,即 -s[i](或代码中的 ans -= int(s[i]))。
2. 累加求和:维护一个累加器 ans,将每个字符的贡献值累加,最终得到结果。
3. 边界处理:数据范围 n≤105n \le 10^5n≤105,累加结果最坏情况下约为 105×26≈2.6×10610^5 \times 26 \approx 2.6 \times 10^6105×26≈2.6×106(全小写)或 −105×90≈−9×106-10^5 \times 90 \approx -9 \times 10^6−105×90≈−9×106(全大写),在 32 位整数范围内,无需使用 long long。
完整代码