Wildlife Reintroduction - codepath/compsci_guides GitHub Wiki

U-nderstand

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

  • Q
    • What is the desired outcome?
      • To determine the maximum number of copies of target_species that can be formed from raised_species.
    • What input is provided?
      • Two strings, raised_species and target_species.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Count the frequency of each species in both strings, then determine the maximum number of copies of target_species that can be formed.

1) Count the frequency of each species in `raised_species` and `target_species`.
2) Initialize `max_copies` to infinity.
3) For each species in `target_species`, calculate how many times it can be formed from `raised_species`.
4) Return the minimum value from the above calculations.

⚠️ Common Mistakes

  • Not handling cases where a species in target_species is missing from raised_species.

I-mplement

def max_species_copies(raised_species, target_species):
    # Step 1: Create frequency dictionaries for raised_species and target_species
    raised_count = {}
    target_count = {}
    
    # Count the occurrences in raised_species
    for species in raised_species:
        if species in raised_count:
            raised_count[species] += 1
        else:
            raised_count[species] = 1
    
    # Count the occurrences in target_species
    for species in target_species:
        if species in target_count:
            target_count[species] += 1
        else:
            target_count[species] = 1
    
    # Step 2: Initialize the maximum number of copies to a large value
    max_copies = float('inf')
    
    # Step 3: Determine the maximum number of copies that can be formed
    for species in target_count:
        if species in raised_count:
            # Calculate how many times this species in target can be formed
            max_copies = min(max_copies, raised_count[species] // target_count[species])
        else:
            # If a species in target is not in raised_species, return 0
            return 0
    
    return max_copies