Leetcode problem: 2914. Minimum Number of Changes to Make Binary String Beautiful

Description:

You are given a 0-indexed binary string s having an even length.

A string is beautiful if it’s possible to partition it into one or more substrings such that:

  • Each substring has an even length.
  • Each substring contains only 1‘s or only 0‘s.

You can change any character in s to 0 or 1.

Return the minimum number of changes required to make the string s beautiful.

Example 1:

Input: s = "1001"
Output: 2
Explanation: We change s[1] to 1 and s[3] to 0 to get string "1100".
It can be seen that the string "1100" is beautiful because we can partition it into "11|00".
It can be proven that 2 is the minimum number of changes needed to make the string beautiful.

Example 2:

Input: s = "10"
Output: 1
Explanation: We change s[1] to 1 to get string "11".
It can be seen that the string "11" is beautiful because we can partition it into "11".
It can be proven that 1 is the minimum number of changes needed to make the string beautiful.

Example 3:

Input: s = "0000"
Output: 0
Explanation: We don't need to make any changes as the string "0000" is beautiful already.

Solution:

class Solution {
    public int minChanges(String s) {
        int len = s.length();
        int count = 1;
        int changeRequired = 0;
        
        int start = 0;
        int end = start+1;
        char ch= s.charAt(start);

        while(start<end && end<len){
             if(s.charAt(start) != s.charAt(end)){
               count++;
               if(count%2 == 0){
                 changeRequired++;
                 start= end+1;
                 end = start+1;
                 count=1;
               }
               else{
                 end++;
                 
               }
               
             }
             else{
                count++;
               if(count%2 == 0){
                 start= end+1;
                 end = start+1;
                 count=1;
               }
               else{
                 end++;
                 
               }
             }
        }
        return changeRequired;
    }
}

Approach:

  • The code scans the string using two pointers.
  • It groups characters into segments.
  • Each time it completes an even-length segment:
    • If the segment had both 0 and 1, increment changeRequired.
    • If it had all same characters, no change is needed.
  • Continues until the entire string is processed.

🧮 Example Walkthrough

Input: "0101"

StepstartendSegmentActionchangeRequired
101"01"different → even → +1 change1
223"01"different → even → +1 change2

Result: changeRequired = 2

✅ Matches expected output.


🕒 Time & Space Complexity

  • Time: O(n) — each character is visited at most once or twice.
  • Space: O(1)
0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Testingtalkslatest.com - A project by CreativeHub IT Solutions.
Contact Us At: support@testingtalkslatest.com
Our Partner websites - Classified Hub , CodesToolbox , CodesToolbox
Scroll to Top
0
Would love your thoughts, please comment.x
()
x