(力扣每日一題)計數二進位制子串

2021-10-09 00:25:25 字數 1029 閱讀 4696

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

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

解題思路

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

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

**

class

solution

:def

countbinarysubstrings

(self, s:

str)

->

int:

count =[1

] j =

0for i in

range(1

,len

(s))

:# 統計連續的頻數

if s[i]

== s[i-1]

: count[j]+=1

else:1

) j +=

1 res =

0for k in

range(1

,len

(count)):

res +=

min(count[k]

, count[k-1]

)# 取相鄰頻數的最小值

return res

時間複雜度:o(n)

空間複雜度:o(n)

力扣 696 計數二進位制子串 C

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

演算法題 計數二進位制子串

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

計數二進位制子串

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