LeetCode 696. Count Binary Substrings

Given a binary string s, return the number of non-empty 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: s = "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: s = "10101"
Output: 4
Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.

Constraints:

  • 1 <= s.length <= 105
  • s[i] is either '0' or '1'.

这题给了一个由0和1组成的binary string,要求string中有多少个substring有相同个数的0和1并且所有0和所有1都在一起。

拿到这道题就是一个愣住,不会。于是就直接抄了答案,于是就被这个解法惊呆了。是什么样的大天才才能想到这种解法啊!

我们计算每组连续的0或者1有多少个,相邻的两组里,长度更短的就是这两组放在一起时能拿到的最多的符合条件的substring了。就这么一想确实很合理很简单,但是自己为什么就是想不到呢。我好菜啊.jpg

写起代码来也是非常简单了,就是需要注意一下最后不能直接return result,因为最后一组还没算呢,这个小坑差点掉进去了。

复制代码
class Solution {
    public int countBinarySubstrings(String s) {
        int prev = 0;
        int curr = 1;
        int result = 0;
        for (int i = 1; i < s.length(); i++) {
            if (s.charAt(i - 1) == s.charAt(i)) {
                curr++;
            } else {
                result += Math.min(prev, curr);
                prev = curr;
                curr = 1;
            }
        }
        return result + Math.min(prev, curr);
    }
}
相关推荐
v_for_van7 小时前
力扣刷题记录7(无算法背景,纯C语言)
c语言·算法·leetcode
We་ct10 小时前
LeetCode 105. 从前序与中序遍历序列构造二叉树:题解与思路解析
前端·算法·leetcode·链表·typescript
Tisfy15 小时前
LeetCode 1523.在区间范围内统计奇数数目:两种方法O(1)算
算法·leetcode·题解
元亓亓亓17 小时前
LeetCode热题100--41. 缺失的第一个正数--困难
数据结构·算法·leetcode
识君啊20 小时前
Java 栈 - 附LeetCode 经典题解
java·数据结构·leetcode·deque··stack·lifo
苦藤新鸡21 小时前
63.排序数组中找元素的第一个元素和最后一个元素
算法·leetcode
We་ct21 小时前
LeetCode 106. 从中序与后序遍历序列构造二叉树:题解+思路拆解
前端·数据结构·算法·leetcode·typescript
iAkuya21 小时前
(leetcode)力扣100 72每日温度(栈)
算法·leetcode·职场和发展
52Hz1181 天前
力扣39.组合总和、22.括号生成、79.单词搜索
python·leetcode
追随者永远是胜利者1 天前
(LeetCode-Hot100)53. 最大子数组和
java·算法·leetcode·职场和发展·go