利用group, 将每个连着的0或者1计数并且append进入group里面, 然后再将group里面的两两比较, 得到min, 并且加入到ans即可. T: O(n) S: O(n) 比较好理解
improve: 思路相同, 用pre和cur去将space节省到O(1)
Code
1) T: O(n) S: O(n)
class Solution: def countBinarySubstrings(self, s): group = [1] for i in range(1,len(s)): if s[i] != s[i-1]: group.append(1) else: group[-1] += 1 ans = 0 for i in range(len(group) -1): ans += min(group[i], group[i+1]) return ans
2) T: O(n) S: O(1)
class Solution: def countBinarySubstrings(self, s): ans, pre, cur = 0, 0, 1 for i in range(1,len(s)): if s[i] != s[i-1]: ans += min(pre, cur) pre, cur = cur, 1 else: cur += 1 return ans + min(pre, cur)