求字符串中互异的非平凡子串

问题:设S是一个长度为n的字符串,其中字符各不相同,则S中的互异非平凡子串(非空且不同于本身)有多少个?

解析:使用归纳法

如S字符串为”abcdefg”,长度为7。则S中的包含的互不相同的字串如下:

1.长度为6的个数为2:”abcdef”和”bcdefg”

2.长度为5的个数为3:”abcde”,”bcdef”,”cdefg”

......

6.长度为1的个数为7:”a”,”b”,”c”,”d”,”e”,”f”,”g”,

其个数总和就是2+3+4+5+6+7 = (1+2+3+..+7) – 1 = 7x(7+1)/2 – 1(减1是减去原字符串自身).

可得扩展,其中:
1+2+3+…+n = (1+n) + (2+(n-1)) + (3+(n-2)) + …(首尾两项相加的和都是n+1,共 n/2个)
= n(n+1)/2

注:上面的公式还需要减1,因为只需要从2累加到n,字符串本身不算。

故答案为:  n(n+1)/2-1

 

 

posted @ 2020-10-29 12:11  顾小朝  阅读(4566)  评论(0编辑  收藏  举报