Skip to main content

Minimum Number of Changes to Make a Binary String Beautiful | Leetcode : 2914

In this LeetCode problem, we're tasked with transforming a given binary string into a "beautiful" string. A beautiful string is one that can be partitioned into substrings, each containing only 0s or 1s and having an even length.

To achieve this beauty, we're allowed to change any character in the string to either 0 or 1. The challenge lies in determining the minimum number of such changes required.

Intuition and Approach

To solve this problem efficiently, we can employ a greedy approach. We'll iterate through the string, keeping track of the current character and the count of consecutive occurrences of that character.

  1. Iterate and Count:

    • Start with the first character and initialize a count to 1.
    • As we traverse the string, we increment the count if the current character matches the previous one.
    • If the current character is different, we've encountered a new substring.
  2. Handle Odd-Length Substrings:

    • If the current count is odd, we'll need to make a change.
      • If it's the last character, we can simply change it.
      • Otherwise, we can either change the current character or the next character to match the previous substring. We choose the option that requires fewer changes.
  3. Update the Current Character and Count:

    • After handling odd-length substrings, we update the current character and reset the count to 1 for the new substring.

Code Implementation

Here's the C++ code implementing this approach:

class Solution {
public:
    int minChanges(string s) {
        int n = s.length();
        int changes = 0, count = 1;
        char ch = s[0];

        for (int i = 1; i < n; ++i) {
            if (s[i] == ch) {
                count++;
            } else {
                if (count % 2 == 1) {
                    changes++;
                    if (i + 1 < n && s[i + 1] == ch) {
                        count = 1; // Start a new substring with the next character
                    }
                }
                ch = s[i];
                count = 1;
            }
        }

        return changes;
    }
};

Explanation of the Code:

  1. Initialization:

    • changes: Stores the total number of changes required.
    • count: Keeps track of the current character's consecutive occurrences.
    • ch: Stores the current character.
  2. Iteration:

    • We iterate through the string, starting from the second character.
    • If the current character matches the previous one, we increment the count.
    • If they don't match:
      • If the current count is odd, we need to make a change. We choose the more efficient option between changing the current character or the next character.
      • We update the ch and reset the count for the new substring.
  3. Return the Result:

    • After the loop, changes will hold the minimum number of changes required to make the string beautiful.

Time and Space Complexity:

  • Time complexity: O(N), where N is the length of the string.
  • Space complexity: O(1), as we use constant extra space.

By following this approach, we can efficiently determine the minimum number of changes needed to transform a given binary string into a beautiful one.

Popular posts from this blog

Top 10 Beginner-Friendly LeetCode Questions and Their Solutions

If you're new to solving coding problems on LeetCode, it can feel overwhelming. Where do you start? Which problems are suitable for beginners? Don’t worry! In this blog post, I’ll guide you through 10 beginner-friendly LeetCode questions that are perfect for getting started on your coding journey. These problems will help you build confidence, improve your problem-solving skills, and lay a solid foundation in data structures and algorithms. Why Start with Beginner-Friendly Problems? Before diving into advanced topics like dynamic programming or graph theory, it’s essential to: Build a strong foundation in basic programming concepts. Understand how to approach a coding problem methodically. Gain familiarity with LeetCode’s platform and its problem structure. The following problems are simple yet impactful, designed to introduce you to common techniques like loops, arrays, strings, and basic math operations. 10 Beginner-Friendly LeetCode Problems 1. Two Sum (Easy) Problem Link : Two...

LeetCode 2583: Kth Largest Sum in a Binary Tree – Solution Explained

When working with binary trees, one common task is to analyze the properties of the tree's levels. In this blog post, we'll walk through a solution to LeetCode Problem 2583: Kth Largest Sum in a Binary Tree , a problem that challenges us to compute and find specific sums from different levels of a binary tree. Problem Statement You are given the root of a binary tree and a positive integer k . Your goal is to return the k-th largest level sum in the tree. The level sum is defined as the sum of the values of all nodes at the same depth in the tree. If the number of levels in the tree is less than k , the function should return -1 . Example 1: Input: root = [5, 8, 9, 2, 1, 3, 7, 4, 6] , k = 2 Output: 13 Explanation: Level 1 sum: 5 Level 2 sum: 8 + 9 = 17 Level 3 sum: 2 + 1 + 3 + 7 = 13 Level 4 sum: 4 + 6 = 10 The 2nd largest sum is 13 . Example 2: Input: root = [1, 2, null, 3] , k = 1 Output: 3 Explanation: The largest level sum is 3 (at the third level). This problem essentia...

LeetCode 3370: Smallest Number With All Set Bits – Problem Explanation and Solutions

Are you looking to master bit manipulation and tackle interesting coding challenges? In this post, we’ll explore LeetCode Problem 3370: Smallest Number With All Set Bits . We’ll dive deep into the problem statement, break down a brute force approach, and finally discuss an optimized solution. If you’re preparing for technical interviews or just love solving algorithmic problems, this guide is for you! Problem Statement: Smallest Number With All Set Bits You are given a positive integer n . Your task is to find the smallest number x such that: x is greater than or equal to n . The binary representation of x consists only of set bits ( 1 s). Examples: Example 1: Input: n = 5 Output: 7 Explanation: The binary representation of 7 is 111 , which is the smallest number greater than or equal to 5 with all bits set. Example 2: Input: n = 10 Output: 15 Explanation: The binary representation of 15 is 1111 . Example 3: Input: n = 3 Output: 3 Explanation: The binary representation of 3 is...