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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容