校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 字符串匹配
题目

n 个字符构成的字符串,假设每个字符都不一样,问有多少个子串?

A.n+1

B.n(n+1)/2 + 1

C.2^n-1

D.n!

解答

正确答案是 B

对于一个字符串变量,例如"adereegfbw",它的子串就是像"ader"这样可以从中找到的连续的字符串。字符串"adereegfbw"本身也属于它本身最长的子串。所以长度n的字符串的子串是B

C 7条回复 评论
海边的卡夫卡

感谢,这种刷题式的学习方式真的很方便!

发表于 2023-07-13 22:00:00
0 0
Alone

不错,慢慢看

发表于 2021-09-11 10:05:00
0 0
瀑布的背后

真的好拼呀

发表于 2021-09-10 23:40:00
0 0
雨声敲敲

对于长度为n的字符串:(注意里面有n+1个字符。)


长度为 1 的字符串 n 个
长度为 2 的 n-1 个
长度为 3 的 n-2 个
...
长度为 n 的 1 个
长度为0 的 1 个
然后 n+(n-1)+(n-2)+...+1 + 1 =n(n+1)/2 + 1
发表于 2016-03-13 10:38:39

发表于 2018-10-13 15:27:45
0 0
小洁癖

【答案】B

【解析】 字符串的子串,就是字符串中的某一个连续片段。截取一个字符串长度需要一个起始位置和结束位置。举个例子:“software”有8个字符,可是设置间隔的位置有9个,使用C(9,2)=36即可求得“software”的所有非空子串。因为一般情况下,我们也认为空串也是子串,故还需要加上1,总共37个子串。

含有n个不同字符的字符串的非空子串的个数为C(n + 1, 2) = n * (n + 1) / 2 
子串(包括空串)为 n * (n + 1) / 2 + 1 

非空真子子串(不包括空串和跟自己一样的子串)为 n *(n + 1)/ 2 - 1

发表于 2018-10-13 15:27:34
0 0
虹猫

为什么没有包含空串,不应该是n*(n+1)/2 + 1吗?

发表于 2018-10-13 15:27:16
0 0
站桩灵

这么想就很简单:
长度为 1 的字符串 n 个
长度为 2 的 n-1 个
长度为 3 的 n-2 个
...
长度为 n 的 1 个
然后 n+(n-1)+(n-2)+...+1 =n(n+1)/2

发表于 2018-10-13 15:27:09
0 0