Binary Substrings - codepath/compsci_guides GitHub Wiki

Unit 3 Session 2 (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Look for runs of consecutive numbers, and when two adjacent runs match in length, count that substring.

1) Previous run length starts at 0
2) Current run length starts at 1
3) Count starts at 0
4) For each character except the first:
  a) Does current char match the prev char?
     i) If so, current run length goes up by 1
    ii) If not, current run is over:
        - Set prev run to curr run
        - Set curr run to 1
  b) Does prev run >= curr run?
     i) If so, add 1 to count 
5) Return count

⚠️ Common Mistakes

  • Since you need to compare each character to the one before, be careful with your loop. If you start at 0, your code might try to access index "-1" and run into an error.

I-mplement

def binary_substrings_count(s):
    prev_run_length = 0
    curr_run_length = 1
    count = 0
    for i in range(1, len(s)):
        if s[i] == s[i-1]:
            curr_run_length += 1
        else:
            prev_run_length = curr_run_length
            curr_run_length = 1
        if prev_run_length >= curr_run_length:
            count += 1
    return count