給定乙個字串 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 ...