NOIP 普及组初赛 · NOIP 2012 普及组初赛试题 第 19 题

选择题 · 答案 C · 考点:字符串(string)

← 整套速查表 NOIP 普及组初赛 全部真题

题目

原字符串中任意一段连续的字符所组成的新字符串称为子串。则字符 $\texttt{AAABBBCCC}$ 共有( )个不同的非空子串。

答案:C

考点

字符串(string)

解题思维

这题不能直接套公式,得先数出AA、BB、CC各自能贡献几个不同子串,再把AB、BC、ABC这些混合子串加起来。

常见错误

最容易把答案算成45,就是忘了AAABBBCCC里A、B、C都重复了,直接用n(n+1)/2会算出所有子串数,但题目要的是不同子串。还有人会漏掉跨字符的组合,比如只数了AA、AB、BA,忘了ABC、ABB、BCC这些。

详细解析(节选)

考点与命题视角

这题考的是去重计数:字符串的子串定义是连续片段,但题目要求“不同的”子串。命题人喜欢用重复字符来挖坑,让学生以为直接套公式就行,其实得把重复产生的相同子串剔除。

人话讲概念

子串就是原串里切出来的一段连续字符。比如AAABBBCCC里,"AAB"是子串,"ABC"也是,但"ABA"不是,因为原串里A后面紧跟着B再后面是B,没有A。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断