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;
        
        
    };
  • 相关阅读:
    经典博客
    Django中间介
    Django知识总结
    django认证系统
    Django-model基础知识,ORM,表操作
    Django-MTV
    web框架
    html总结(常用插件,补充知识,经典例题)
    快速搭建vue脚手架
    Djngo Rest Framework
  • 原文地址:https://www.cnblogs.com/gogolee/p/8127184.html
Copyright © 2011-2022 走看看