Leetcode 696計數二進位制子串

2021-10-09 01:31:19 字數 1140 閱讀 8707

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

**思路:

這個題的思路倒是非常簡單,主要在於檢索出子串的要求必須要求所有的0和1分別組合在一起。進而可以得出所有的子串的中心全部在01交界的地方。所以可以總結出:

一:如果已知當前1前有0000,再往後搜尋1的個數如果1的個數有3個,組成0000111,就可以有三個子串,01,0011,000111。

二:對於001100這個樣子的字串,分別對於0011和1100兩個子串進行一的檢索就可以知道全部的合法子串。

上述思路和leetcode官方思路一致。

**如下:

public

intcountbinarysubstrings

(string s)

else

//result=result+min(front,temp);

temp=front;

}return result;

}

結果如下:

**分析:

時間複雜度:o(n),空間複雜度 o(1)

踩坑分析:

**中注釋的部分是乙個函式,返回front和temp的較小的數。但是這樣就會造成執行時間的變長。

如果使用函式返回結果如下。

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...