跳转至

ABC248A Lacked Number

题意分析

给定一个长度为 $9$ 的字符串 $S$,其由 互不相同的数字字符组成,也就是说,$S$ 是从 $0$ 到 $9$ 这 $10$ 个数字中选出 $9$ 个。

题目要求你找出 缺失的那一个数字 并输出。


解题思路

本题可以抽象为一个 字符统计问题,属于字符串处理中的常规题型。

核心思想:

我们需要从 $0$ 到 $9$ 这 $10$ 个数字中,找出 哪个不在字符串 $S$ 中出现。由于 $S$ 中的字符都互不相同,因此只会缺失一个数字。

具体做法:

  1. 准备一个布尔数组或标记数组 vis[10],初始全为 false
  2. 遍历字符串 $S$ 中的每一个字符 c,将其转为整数(即 c - '0'),并标记在 vis 中;
  3. 最后扫描 vis[0]vis[9],哪个为 false,说明该数字没有出现;
  4. 输出该缺失的数字即可。

类似题型的延伸方法:字母映射技巧

在处理字母统计类字符串问题时,通常会将 'a' 映射为 0'z' 映射为 25,即:

  • ch - 'a' 对应 0~25 范围,用于映射小写字母;
  • ch - '0' 用于映射数字字符(0~9);

这种映射方式便于建立计数数组,例如 vis[26]vis[10]


时间与空间复杂度分析

  • 时间复杂度:$O(9 + 10) = O(1)$,因为字符串固定长度为 $9$;
  • 空间复杂度:$O(1)$,标记数组 vis[10] 占用常数空间。

总结

  • 本题为经典的字符串映射与计数问题
  • 将字符映射为整数后使用布尔数组快速判断;
  • 思维简单清晰,适合练习基础字符串操作。