-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCountBinarySubstrings.php
More file actions
49 lines (47 loc) · 1.47 KB
/
Copy pathCountBinarySubstrings.php
File metadata and controls
49 lines (47 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
namespace App;
/**
* Count Binary Substrings
*
* Given a binary string s, return the number of non-empty substrings that have the same number of 0's and 1's, and all
* the 0's and all the 1's in these substrings are grouped consecutively. Substrings that occur multiple times are
* counted the number of times they occur.
*
* Example 1:
* Input: s = "00110011"
* Output: 6
* Explanation: There are 6 substrings that have equal number of consecutive 1's and 0's: "0011", "01", "1100", "10",
* "0011", and "01".
* Notice that some of these substrings repeat and are counted the number of times they occur.
* Also, "00110011" is not a valid substring because all the 0's (and 1's) are not grouped together.
*
* Example 2:
* Input: s = "10101"
* Output: 4
* Explanation: There are 4 substrings: "10", "01", "10", "01" that have equal number of consecutive 1's and 0's.
*
* https://leetcode.com/problems/count-binary-substrings
*/
class CountBinarySubstrings
{
/**
* @param string $str
* @return int
*/
public function countBinarySubstrings(string $str): int
{
$count = 0;
$prev = 0;
$curr = 1;
for ($i = 1, $iMax = strlen($str); $i < $iMax; $i++) {
if ($str[$i] === $str[$i - 1]) {
$curr++;
} else {
$count += min($prev, $curr);
$prev = $curr;
$curr = 1;
}
}
return $count + min($prev, $curr);
}
}