zoukankan      html  css  js  c++  java
  • LeetCode 696. Count Binary Substrings

    Give a string s, count the number of non-empty (contiguous) substrings that have the same number of 0's and 1's, and all the 0's and all the 1's in these substrings are grouped consecutively.

    Substrings that occur multiple times are counted the number of times they occur.

    Example 1:

    Input: "00110011"
    Output: 6
    Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10", "0011", and "01".
    
    Notice that some of these substrings repeat and are counted the number of times they occur.
    Also, "00110011" is not a valid substring because all the 0's (and 1's) are not grouped together.

    Example 2:

    Input: "10101"
    Output: 4
    Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.

    Answer:

    这道题读了半天没读懂,没思路,后来看了一下别人的solution知道要做什么了,大体思路这样子,比如我有一个string `00110011`, 我按照相同的数字group起来,group的值是相同数字出现的个数。那么对于这个字符,我们会得到一个数组[2,2,2,2] (00出现两次,11出现两次,00出现两次,11出现两次)。

    然后比如对于`0011` ,那么他会有两个substring符合条件,即就是`0011`和`01` ,这个number2可以由这个得到Math.min(2,2). (2为[2,2,2,2]中第一个元素,2为[2,2,2,2]中第二个元素)。 所以就遍历得到的那个数组,两两比较将结果相加就可以了。底下这个版本的代码已经Accepted。

    /**
     * @param {string} s
     * @return {number}
     */
    var countBinarySubstrings = function(s) {
        var sum = 0;
        var arr = s.split("");
        var count = 1; var index = 0;
        var countArr = [1];
        for(var i = 1; i< arr.length; i++) {
            if(arr[i-1] == arr[i]) 
                count++;
            else {
               count = 1;
               index++;
            }
            if(!countArr[index]) {
                countArr[index] = 0;
            }    
            countArr[index]++;
        }
        
    
        for(var j = 0; j < countArr.length - 1; j++) {
          var num = Math.min(countArr[j], countArr[j+1]);
          sum+= num;
          
        }
        
       return sum;
        
        
    };
  • 相关阅读:
    install jprofiler for ubuntu
    android manifest相关属性
    install nginx for ubuntu
    Android shape
    mobile web for no cookie session
    Android布局属性
    什么是强类型,强类型集合
    radl (三) (转)
    几个.net 基础问题,自己回答了一些,请大家指教
    c#接口和抽象类的区别
  • 原文地址:https://www.cnblogs.com/gogolee/p/8127184.html
Copyright © 2011-2022 走看看