求字串子串數目的方法
最近在做一些演算法題,經常遇到字串的問題,需要計算字串子串的數目,字串的子串數目為
n(n+1)/2 + 1,這個答案是如何求得的呢?
我們都知道子串是一個字串中連續的一段,其實你可以把它抽象為周圍有邊界的一串字元,如”abcde”,你可以把子串”bc”抽象為”a|bc|de”,這樣一來計運算元串數目的問題其實就轉化成了計算字串中放置邊界的問題,一個長度為n的字串中可以放置n個邊界,放置第一個邊界後可以放置有n-1種選擇作為第二條邊界,這樣得到n(n-1)條子串,又因為兩條邊界順序互換子串不變,所以結果需要除以2,最後再加上字串本身,得到n(n+1)/2 + 1。