leetcode:https://leetcode.com/problems/count-binary-substrings/code
給定一個字符串 s
,計算具備相同數量0和1的非空(連續)子字符串的數量,而且這些子字符串中的全部0和全部1都是組合在一塊兒的。leetcode
重複出現的子串要計算它們出現的次數。字符串
示例 1 :get
輸入: "00110011" 輸出: 6 解釋: 有6個子串具備相同數量的連續1和0:「0011」,「01」,「1100」,「10」,「0011」 和 「01」。 請注意,一些重複出現的子串要計算它們出現的次數。 另外,「00110011」不是有效的子串,由於全部的0(和1)沒有組合在一塊兒。
示例 2 :string
輸入: "10101" 輸出: 4 解釋: 有4個子串:「10」,「01」,「10」,「01」,它們具備相同數量的連續1和0。
注意:co
s.length
在1到50,000之間。s
只包含「0」或「1」字符。//原來我想的是既然s裏面 我能夠知道有多少1和0,那麼我把全部的可能狀況組合一下,而後看在s裏面匹配如何 //就是想一想以爲比較麻煩,不想下手,這是我看前人的作法! public int countBinarySubstrings(String s) { int prevRunLength = 0, curRunLength = 1, res = 0; for (int i = 1; i < s.length(); i++) { if (s.charAt(i) == s.charAt(i - 1)) { curRunLength++; } else { prevRunLength = curRunLength; curRunLength = 1; } if (prevRunLength >= curRunLength) { res++; } } return res; }