Skip to content

Commit cdc37b9

Browse files
committed
Time: 6348 ms (85.71%), Space: 19.5 MB (33.33%) - LeetHub
1 parent 365f26d commit cdc37b9

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# time complexity: O(n ^ (1/n))
2+
# space complexity: O(n)
3+
class Solution:
4+
def numberOfSubstrings(self, s: str) -> int:
5+
n = len(s)
6+
prefix = [-1] * (n + 1)
7+
for i in range(n):
8+
if i == 0 or s[i - 1] == "0":
9+
prefix[i + 1] = i
10+
else:
11+
prefix[i + 1] = prefix[i]
12+
13+
result = 0
14+
for i in range(1, n + 1):
15+
zeroes = 1 if s[i - 1] == "0" else 0
16+
j = i
17+
while j > 0 and zeroes * zeroes <= n:
18+
ones = (i - prefix[j]) - zeroes
19+
if zeroes * zeroes <= ones:
20+
result += min(j - prefix[j], ones - zeroes * zeroes + 1)
21+
j = prefix[j]
22+
zeroes += 1
23+
return result
24+
25+
26+
s = "00011"
27+
print(Solution().numberOfSubstrings(s))
28+
s = "101101"
29+
print(Solution().numberOfSubstrings(s))

0 commit comments

Comments
 (0)