Program to find number of ways we can arrange letters such that each prefix and suffix have more Bs than As in Python

Suppose we have a string with n number of A's and 2n number of B's. We need to find the number of arrangements possible such that in each prefix and each suffix, the number of B's is greater than or equal to the number of A's.

This is a classic problem in combinatorics known as the ballot problem or Catalan number variant. The constraint ensures that at any point while reading from left to right (or right to left), we never have more A's than B's.

Problem Understanding

For n = 2, we have 2 A's and 4 B's. The valid arrangements are:

  • BBAABB
  • BABABB
  • BBABAB
  • BABBAB

Each arrangement satisfies the condition that every prefix has B's ? A's.

Solution Approach

The solution follows a recursive pattern based on the mathematical properties of valid arrangements ?

def solve(n):
    # Base cases
    if n == 1:
        return 1
    if n == 2:
        return 4
    
    # Recursive cases
    if n % 2 != 0:  # n is odd
        return solve((n - 1) // 2) ** 2
    else:  # n is even
        return solve(n // 2) ** 2

# Test with the example
n = 2
result = solve(n)
print(f"For n = {n}, number of valid arrangements: {result}")
For n = 2, number of valid arrangements: 4

Testing with Different Values

Let's verify the solution with multiple test cases ?

def solve(n):
    if n == 1:
        return 1
    if n == 2:
        return 4
    if n % 2 != 0:
        return solve((n - 1) // 2) ** 2
    else:
        return solve(n // 2) ** 2

# Test multiple values
test_cases = [1, 2, 3, 4, 5]

for n in test_cases:
    result = solve(n)
    total_chars = 3 * n  # n A's + 2n B's
    print(f"n = {n}: {n} A's, {2*n} B's ? {result} arrangements")
n = 1: 1 A's, 2 B's ? 1 arrangements
n = 2: 2 A's, 4 B's ? 4 arrangements
n = 3: 3 A's, 6 B's ? 1 arrangements
n = 4: 4 A's, 8 B's ? 4 arrangements
n = 5: 5 A's, 10 B's ? 4 arrangements

How the Algorithm Works

The recursive formula works by:

  • Base cases: n=1 returns 1, n=2 returns 4
  • Odd n: Uses solve((n-1)//2)² pattern
  • Even n: Uses solve(n//2)² pattern

This mathematical relationship emerges from the structural properties of valid string arrangements where the prefix-suffix constraint must be maintained.

Conclusion

The solution uses a recursive approach with base cases to efficiently calculate valid arrangements. The key insight is recognizing the mathematical pattern that emerges from the constraint requirements.

Updated on: 2026-03-26T18:23:07+05:30

253 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements