题目地址: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[]
中所有相邻两个数的较小数字相加即可。
- 由字符串
s
得到数组groups[]
- 由
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