696 計數二進位制子串

2021-10-09 01:18:34 字數 1024 閱讀 6482

給定乙個字串 s,計算具有相同數量0和1的非空(連續)子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。

重複出現的子串要計算它們出現的次數。

示例 1

:輸入:

"00110011"

輸出:6

解釋: 有6個子串具有相同數量的連續1和0:「0011」,「01」,「1100」,「10」,「0011」 和 「01」。

請注意,一些重複出現的子串要計算它們出現的次數。

另外,「00110011」不是有效的子串,因為所有的0(和1)沒有組合在一起。

示例 2

:輸入:

"10101"

輸出:4

解釋: 有4個子串:「10」,「01」,「10」,「01」,它們具有相同數量的連續1和0。

注意:s.length 在1到50

,000之間。

s 只包含「0」或「1」字元。

class

solution

counts.

add(count);}

//00110011先計算出counts中的值;

int ans=0;

for(

int i=

1;isize()

;++i)

return ans;

}}

這個實現的時間複雜度和空間複雜度都是o(n)。

對於某乙個位置 i,其實我們只關心i−1 位置的counts 值是多少,所以可以用乙個last 變數來維護當前位置的前乙個位置,這樣可以省去乙個 counts 陣列的空間。

class

solution

ans += math.

min(count, last)

; last = count;

}return ans;}}

;

複雜度分析

時間複雜度:o(n)。

空間複雜度:o(1)。

696 計數二進位制子串

給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01 請注意,...

696 計數二進位制子串

計數二進位制子串 給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 ...

696 計數二進位制子串 C

題目詳情 給定乙個字串 s,計算具有相同數量0和1的非空 連續 子字串的數量,並且這些子字串中的所有0和所有1都是組合在一起的。重複出現的子串要計算它們出現的次數。示例 1 輸入 00110011 輸出 6 解釋 有6個子串具有相同數量的連續1和0 0011 01 1100 10 0011 和 01...