算法笔记: 力扣#696 计数二进制子串

问题描述


解法


分析

Python 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class :
def countBinarySubstrings(self, s):
"""
:type s: str
:rtype: int
"""
ans, prev, cur = 0, 0, 1
for i in range(1, len(s)):
if s[i] != s[i-1]:
ans += min(prev, cur)
prev, cur = cur, 1
else:
cur += 1
return ans + min(prev, cur)

Java 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class {
public int countBinarySubstrings(String s) {
int ans = 0;
int prev = 0;
int cur = 1;
for(int i = 1; i < s.length(); i++){
if(s.charAt(i) != s.charAt(i-1)){
ans += (prev < cur ? prev : cur);
prev = cur;
cur = 1;
}else{
cur ++;
}
}
return ans + (prev < cur ? prev : cur);
}
}

时间复杂度

O(N).

空间复杂度

O(1).

链接


696. Count Binary Substrings
696. 计数二进制子串
(English version) Algorithm Notes: Leetcode#696 Count Binary Substrings