696 計數二進位制子串

2021-10-09 01:29:10 字數 976 閱讀 2286

計數二進位制子串

給定乙個字串 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」字元。

方法一:按字元分組

思路與演算法

我們可以將字串 s按照 00 和 11 的連續段分組,存在 counts 陣列中,例如 s = 00111011,可以得到這樣的 counts 陣列:counts = 。

這裡 counts 陣列中兩個相鄰的數一定代表的是兩種不同的字元。假設 counts 陣列中兩個相鄰的數字為 u 或者 v,它們對應著 u 個 0 和 v 個 1,或者 u 個 1 和 v 個 0。它們能組成的滿足條件的子串數目為 min,即一對相鄰的數字對答案的貢獻。

我們只要遍歷所有相鄰的數對,求它們的貢獻總和,即可得到答案。

不難得到這樣的實現:

class

solution

counts.

add(count);}

int ans =0;

for(

int i =

1;isize()

;i++

)return ans;

}}

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 和 01 請注意,...

696 計數二進位制子串 C

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