日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

696. Count Binary Substrings 计数二进制子串

發布時間:2024/5/7 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 696. Count Binary Substrings 计数二进制子串 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個字符串 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”字符。

字符分組

我們可以將字符串 sss 按照 000111 的連續段分組,存在 counts\rm countscounts 數組中,例如 s=00111011s = 00111011s=00111011,可以得到這樣的 counts\rm countscounts 數組:counts={2,3,1,2}{\rm counts} = \{2, 3, 1, 2\}counts={2,3,1,2}

這里 counts\rm countscounts 數組中兩個相鄰的數一定代表的是兩種不同的字符。假設 counts\rm countscounts 數組中兩個相鄰的數字為 uuu 或者 vvv,它們對應著 uuu000vvv111,或者 uuu111vvv000。它們能組成的滿足條件的子串數目為 min?{u,v}\min \{ u, v \}min{u,v},即一對相鄰的數字對答案的貢獻。

對于某一個位置 iii,其實我們只關心 i?1i - 1i?1 位置的 counts\rm countscounts 值是多少,所以可以用一個 last\rm lastlast 變量來維護當前位置的前一個位置,這樣可以省去一個 counts\rm countscounts 數組的空間。

Code

def countBinarySubstrings(self, s: str) -> int:ans, cur, last, length = 0, 0, 0, len(s)while cur < length:c, count = s[cur], 0while cur < length and s[cur] == c:cur += 1count += 1ans += min(count, last)last = countreturn ans

復雜度分析

  • 時間復雜度:O(n)O(n)O(n)
  • 空間復雜度:O(1)O(1)O(1)

總結

以上是生活随笔為你收集整理的696. Count Binary Substrings 计数二进制子串的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。