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;
        
        
    };
  • 相关阅读:
    164.Maximum Gap
    163.Missing Ranges
    162.Find Peak Element
    161.One Edit Distance
    160.Intersection of Two Linked Lists
    7.5爬取猫眼Top100电影名单
    7.5文件操作
    7.4文件操作(1)
    7.4一个失败的网易云爬虫,
    7.3数据结构(1)
  • 原文地址:https://www.cnblogs.com/gogolee/p/8127184.html
Copyright © 2011-2022 走看看