計數二進制子串

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;
}
相關文章
相關標籤/搜索