# Solving Leetcode Interviews in Seconds with AI: Minimum Cost to Make All Characters Equal


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "2712" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given a 0-indexed binary string s of length n on which you can apply two types of operations:  Choose an index i and invert all characters from index 0 to index i (both inclusive), with a cost of i + 1 Choose an index i and invert all characters from index i to index n - 1 (both inclusive), with a cost of n - i  Return the minimum cost to make all characters of the string equal. Invert a character means if its value is '0' it becomes '1' and vice-versa.   Example 1:  Input: s = "0011" Output: 2 Explanation: Apply the second operation with i = 2 to obtain s = "0000" for a cost of 2. It can be shown that 2 is the minimum cost to make all characters equal.  Example 2:  Input: s = "010101" Output: 9 Explanation: Apply the first operation with i = 2 to obtain s = "101101" for a cost of 3. Apply the first operation with i = 1 to obtain s = "011101" for a cost of 2.  Apply the first operation with i = 0 to obtain s = "111101" for a cost of 1.  Apply the second operation with i = 4 to obtain s = "111110" for a cost of 2. Apply the second operation with i = 5 to obtain s = "111111" for a cost of 1.  The total cost to make all characters equal is 9. It can be shown that 9 is the minimum cost to make all characters equal.    Constraints:  1 <= s.length == n <= 105 s[i] is either '0' or '1'  

	# Explanation
	Here's the breakdown of the solution:

*   **Dynamic Programming:** Use dynamic programming to store the minimum cost to make the prefix of the string all '0's or all '1's.
*   **Two States:** Maintain two states for each index: `dp[i][0]` (minimum cost to make `s[:i+1]` all '0's) and `dp[i][1]` (minimum cost to make `s[:i+1]` all '1's).
*   **Transitions:** Consider applying operation 1 (prefix invert) or operation 2 (suffix invert) or doing nothing, and update the dp states accordingly to find the minimum cost.

*   **Runtime Complexity:** O(n), **Storage Complexity:** O(n)

	
	# Code
	```python
	def min_cost(s: str) -> int:
    """
    Calculates the minimum cost to make all characters of the string equal.

    Args:
        s: A 0-indexed binary string.

    Returns:
        The minimum cost to make all characters of the string equal.
    """
    n = len(s)
    dp = [[0, 0] for _ in range(n)]

    # Initialize base case for the first character
    if s[0] == '0':
        dp[0][1] = 1  # Cost to make it '1' using suffix invert from index 0
    else:
        dp[0][0] = 1  # Cost to make it '0' using suffix invert from index 0

    for i in range(1, n):
        # Case 1: No operation
        if s[i] == '0':
            dp[i][0] = dp[i - 1][0]
            dp[i][1] = dp[i - 1][1] + (n - i)  # Invert suffix [i, n-1] to make s[i] == 0 if it was '1'
        else:
            dp[i][0] = dp[i - 1][0] + (n - i)  # Invert suffix [i, n-1] to make s[i] == 1 if it was '0'
            dp[i][1] = dp[i - 1][1]

        # Case 2: Invert prefix [0, i]
        if s[i] == '0':
            dp[i][1] = min(dp[i][1], dp[i - 1][0] + (i + 1)) # make current 1, from previous 0 state
        else:
            dp[i][0] = min(dp[i][0], dp[i - 1][1] + (i + 1)) # make current 0, from previous 1 state

    return min(dp[n - 1][0], dp[n - 1][1])
	```
			
