leetcode 696 計數二進位制子串

2021-10-09 00:19:03 字數 1137 閱讀 3308

696. 計數二進位制子串

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

:def

countbinarysubstrings

(self, s:

str)

->

int:

s +=

'#'#加乙個結尾符號,統計最後乙個字頻

n =len(s)

count =

cnt =

1for i in

range(1

,n):

#如果當前值和之前的值相同,頻數加一

if s[i]

== s[i-1]

: cnt +=

1else

:#相鄰頻數不同,加入之前的頻數

cnt =

1 out =

0# print(count)

for i in

range(1

,len

(count)):

#計算兩個頻數之間的最小值

out +=

min(count[i]

,count[i-1]

)return out

leetcode 696 計數二進位制子串

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

LeetCode 696 計數二進位制子串

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

leetcode696 計數二進位制子串

題解1 dp dp i 表示當前位置 包括自身 前面連續為 1 或 0 的個數 連續為 1 個數為正,連續為 0 個數為負 當前dp i 數字等於總個數則 continue 否則當前abs dp i abs dp i abs dp i res class solution return res 題解...