若串 $S =\texttt{copyright}$,其子串的个数是( )。
拿到题别急着套公式,先数清串里几个字母。子串本质就是原串里连续切的一段,长度从 1 到 n 依次递减,最后别忘了题目默认含空串,总数就是等差数列求和再加 1。
最容易掉进的坑就是忘了空串。很多同学算出 45 就选 B,其实 NOIP 初赛里“子串个数”默认包含空串,所以正确答案是 46。另外要分清“子串”和“子序列”,子串必须连续,子序列可以跳着取,别把两者搞混了导致公式用错。
这道题考查的是字符串子串个数的计算,核心知识点就是子串的定义和等差数列求和。子串是原字符串中连续的一段字符,比如"abc"的子串有"a","b","c","ab","bc","abc"等,注意"ac"不是子串因为它不连续。题目还隐含了一个重要约定:在 NOIP 信息学竞赛中,"子串个数"默认包含空串(长度为 0 的子串)。命题人喜欢在这里挖坑,因为如果不加空串,答案就是 45(选项 B),加了才是 46(选项 C),这完全是概念细节的差别。拿到题先别慌,数一下"copyright"有几个字母,一共是 9 个。接下来想怎么算:长度为 1 的子串有 9 个,长度为 2 的有 8 个,长度为 3 的有 7 个……一直到长度为 9 的只有 1 个。这正好是个首项为 9、末项为 1、项数为 9 的等差数列。用公式直接算:(9+1)×9÷2 = 45。最后别忘了加上那个空串,45+1 = 46。所以选 C。避坑提醒:如果题目问的是"非空子串",那就别加 1;如果问的是"子序列",那完全是另一回事(2^n 种),千万别把子串和子序列搞混。这个考点在历年初赛里很常见,属于基础但易错。根据统计,"字符串子串个数"在 NOIP 普及组初赛中的真实考频约为 4-5 次/年,属于高频基础考点,但往往和空串定义、子串与子序列区分结合在一起考,命题人总爱在细节上设陷阱,所以同学们复习时一定要把定义抠准,计算过程要稳,别因为漏了空串就丢分。