696. Count Binary Substrings

题目地址:https://leetcode.com/problems/count-binary-substrings/description/

大意:给定一个二进制数字构成的字符串,看有多少个包含0和1数目相同的子字符串,而且要求是连续的0和1,比如”01″,”0011″这种子字符串,但是”0101″这种虽然相同,但是不连续就不行。

思路:

把字符串转化为一个数组groups[],数组的元素是连续多少个0或者1的个数,例如s = "110001111000000", 所以 groups = [2, 3, 4, 6]
这时候,我们发现其实有3组01或者10对,那到底具体数目是多少呢,只要看相邻2个数组中较小的那个就行,例如 2,3可能是"00111"或者那就有"01","0011"这两种情况,当然,如果是"11000"也是一样的,所以,我们只需要把groups[]中所有相邻两个数的较小数字相加即可。

  1. 由字符串s得到数组groups[]
  2. groups[]计算出问题的答案
class Solution:
    def countBinarySubstrings(self, s):
        """
        :type s: str
        :rtype: int
        """
        groups = [1]
        for i in range(0, len(s)-1):
            if s[i] == s[i+1]:
                groups[-1] += 1
            else:
                groups.append(1)
        ans = 0
        for i in range(0,len(groups)-1):
            ans += min(groups[i],groups[i+1])
        return ans

所有题目解题方法和答案代码地址:https://github.com/fredfeng0326/LeetCode
    原文作者:fred_33c7
    原文地址: https://www.jianshu.com/p/f2835a1eada0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞