LeetCode 696 計數二進位制子串

2021-10-09 02:21:08 字數 1347 閱讀 9589

給定乙個字串 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 按照 0 和 1 的連續段分組,存在 counts 陣列中,例如 s = 00111011,可以得到這樣的 counts 陣列:counts = 。

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

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

複雜度分析

class

solution

counts.

add(count);}

for(

int i =

0; i < counts.

size()

-1; i++

)return answer;

}}

優化:

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

**如下:

class

solution

answer = answer + math.

min(last, count)

; last = count;

}return answer;

}}

時間複雜度:o(n)。

空間複雜度:o(1)。

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 一次遍歷即可,關鍵...

leetcode 696 計數二進位制子串

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