子串的個數

2021-10-05 23:54:37 字數 310 閱讀 8427

最近在做一些演算法題,經常遇到字串的問題,需要計算字串子串的數目,字串的子串數目為

n(n+1)/2 + 1,這個答案是如何求得的呢?

我們都知道子串是乙個字串中連續的一段,其實你可以把它抽象為周圍有邊界的一串字元,如"abcde",你可以把子串"bc"抽象為"a|bc|de",這樣一來計算子串數目的問題其實就轉化成了計算字串中放置邊界的問題,乙個長度為n的字串中可以放置n+1個邊界,放置第乙個邊界後可以放置有n種選擇作為第二條邊界,這樣得到n(n+1)條子串,又因為兩條邊界順序互換子串不變,所以結果需要除以2,最後再加上乙個空串,得到n(n+1)/2 + 1。

查詢子串的個數

題目 輸入乙個字串,判斷有多少個子串。輸入 a ds dga ada a asdf 輸出 6 思路 根據空格的數量來計算子串的數量,多個空格按乙個計算 計算空格的數量 int spacecnt char str bspace true else 最後還帶有空格 if bspace 如果一開始就有空格...

不同子串個數

字尾陣列在處理子串問題時往往有奇效,因為字尾的字首即是子串,而字尾陣列正是按照字首排序的字尾。回到本題。因為字尾的字首是子串,則一條字尾與其它所有字尾的lcp的最長長度,即是這條字尾的字首子串中所有被重複計數的串的數量。我們掏出求得的 ht 陣列。初學sa時大家一定接觸過乙個重要的 text 即 o...

字串練習 獲取子串的個數和最大長度子串

package day19 author khq public class stringdemo 獲取子串個數 public static intgetsubstringnum string str1,string str2 else else else indeof,返回第一次索引位置,注意不要為...