美文网首页
696. 计数二进制子串

696. 计数二进制子串

作者: 砂壶 | 来源:发表于2020-05-02 21:57 被阅读0次

696. 计数二进制子串

第一次解:
暴力方法
遍历每个数据,找到其后第一个不同的数,然后看是能与其有匹配数量,有的话总数加一。

/**
 * @param {string} s
 * @return {number}
 */
var countBinarySubstrings = function(s) {
    let len = s.length;
    let p = 0;
    let q;
    let res = 0;
    while(p < len) {
        q= p+1;
        while(q < len) {
            if(s[q] !== s[p]) {
                break;
            } 
            q++;
        }
        if(q < len && s[q] !== s[p]) {
            let repeatNum = q-p-1;
            let flag = true;
            while(repeatNum > 0) {
                if( (q < len-1) && (s[q+1] === s[q])) {
                    repeatNum--;
                    q++;
                } else {
                    flag = false;
                    break;
                }
            }
            if(repeatNum===0 && flag) {
                res++;
            }
        }
        p++;
    }
    return res;
};

结果:
超出时间限制

第二次解:
找到不同数的数量保存进数组,每次取Math.min(pre,cur),累加后即得最后总数。

/**
 * @param {string} s
 * @return {number}
 */
var countBinarySubstrings = function(s) {
    let len = s.length;
    let arr = [1];
    let res = 0;
    for(let i = 1; i < len; i++) {
        if(s[i] === s[i-1]) {
            arr[arr.length-1]++;
        } else {
            arr.push(1);
        }
    }
    let arrLen = arr.length;
    for(let j = 1; j<arrLen; j++) {
        res += Math.min(arr[j], arr[j-1]);
    }
    return res;
};

结果通过。

第三次 使用更少的空间
不保留数组,仅保留前一个和当前数数量的值。

/**
 * @param {string} s
 * @return {number}
 */
var countBinarySubstrings = function(s) {
    let len = s.length;
    let res = 0;
    let pre = 0;
    let cur = 1;
    for(let i = 1; i < len; i++) {
        if(s[i] === s[i-1]) {
            cur++;
        } else {
            res += Math.min(pre, cur);
            pre = cur;
            cur = 1;
        }
    }
    return res+ Math.min(pre, cur);
};

相关文章

  • leetcode

    简单题 696. 计数二进制子串: 一次遍历字符串2020.08.12 连续子序列 vs 子序列 x有序连续思路1...

  • 696. 计数二进制子串

    696. 计数二进制子串 第一次解:暴力方法遍历每个数据,找到其后第一个不同的数,然后看是能与其有匹配数量,有的话...

  • Leetcode 696. 计数二进制子串

    题目描述 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有...

  • Leetcode 696.计数二进制子串(javascript)

    题目 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都...

  • 算法合集

    JavaScript版数据结构与算法 javascript反转字符串中的单词JavaScript计数二进制子串Ja...

  • 696. Count Binary Substrings

    696. Count Binary Substrings[思路]:给一个0,1组成的字符串,计算连续0,1子串的个...

  • JavaScript计数二进制子串

    问题描述给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1...

  • JavaScript 算法 计数二进制子串

    给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合...

  • LeetCode-696-计数二进制子串

    给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合...

  • golang标准库之strings包

    Contains 判断字符串是否包含子串 判断相等&子串计数 计算索引 大小写转换 字符串拆分&拼接 字符串替换 ...

网友评论

      本文标题:696. 计数二进制子串

      本文链接:https://www.haomeiwen.com/subject/clplghtx.html