最近在做一些算法题,经常遇到字符串的问题,需要计算字符串子串的数目,字符串的子串数目为
n(n+1)/2 + 1,这个答案是如何求得的呢?
我们都知道子串是一个字符串中连续的一段,其实你可以把它抽象为周围有边界的一串字符,如”abcde”,你可以把子串”bc”抽象为”a|bc|de”,这样一来计算子串数目的问题其实就转化成了计算字符串中放置边界的问题,一个长度为n的字符串中可以放置n个边界,放置第一个边界后可以放置有n-1种选择作为第二条边界,这样得到n(n-1)条子串,又因为两条边界顺序互换子串不变,所以结果需要除以2,最后再加上字符串本身,得到n(n+1)/2 + 1。