Minimum number of given operations required to convert a string to another string

Given two strings S and T of equal length. Both strings contain only the characters ‘0’ and ‘1’. The task is to find the minimum number of operations to convert string S to T. There are 2 types of operations allowed on string S:

  • Swap any two characters of the string.
  • Replace a ‘0’ with a ‘1’ or vice versa.

Examples:

Input: S = “011”, T = “101”
Output: 1
Swap the first and second character.

Input: S = “010”, T = “101”
Output: 2
Swap the first and second character and replace the third character with ‘1’.

Approach: Find 2 values for the string S, the number of indices that have 0 but should be 1 and the number of indices that have 1 but should be 0. The result would be the maximum of these 2 values since we can use swaps on the minimum of these 2 values and the remaining unmatched characters can be inverted i.e. ‘0’ can be changed to ‘1’ and ‘1’ can be changed to ‘0’.

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the minimum operations
// of the given type required to convert
// string s to string t
int minOperations(string s, string t, int n)
{
    int ct0 = 0, ct1 = 0;
    for (int i = 0; i < n; i++) {
  
        // Characters are already equal
        if (s[i] == t[i])
            continue;
  
        // Increment count of 0s
        if (s[i] == '0')
            ct0++;
  
        // Increment count of 1s
        else
            ct1++;
    }
  
    return max(ct0, ct1);
}
  
// Driver code
int main()
{
    string s = "010", t = "101";
    int n = s.length();
    cout << minOperations(s, t, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.util.*;
  
class GFG
{
  
// Function to return the minimum 
// operations of the given type required 
// to convert string s to string t
static int minOperations(String s, 
                        String t, int n)
{
    int ct0 = 0, ct1 = 0;
    for (int i = 0; i < n; i++)
    {
  
        // Characters are already equal
        if (s.charAt(i) == t.charAt(i))
            continue;
  
        // Increment count of 0s
        if (s.charAt(i) == '0')
            ct0++;
  
        // Increment count of 1s
        else
            ct1++;
    }
  
    return Math.max(ct0, ct1);
}
  
// Driver code
public static void main(String args[])
{
    String s = "010", t = "101";
    int n = s.length();
    System.out.println(minOperations(s, t, n));
}
}
  
// This code is contributed by
// Surendra_Gangwar

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 implementation of the approach
  
# Function to return the minimum operations
# of the given type required to convert
# string s to string t
def minOperations(s, t, n):
  
    ct0 = 0
    ct1 = 0
    for i in range(n):
  
        # Characters are already equal
        if (s[i] == t[i]):
            continue
  
        # Increment count of 0s
        if (s[i] == '0'):
            ct0 += 1
  
        # Increment count of 1s
        else:
            ct1 += 1
  
    return max(ct0, ct1)
  
# Driver code
if __name__ == "__main__":
      
    s = "010"
    t = "101"
    n = len(s)
    print(minOperations(s, t, n))
  
# This code is contributed by ita_c

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach 
  
// Function to return the minimum operations 
// of the given type required to convert 
// string s to string t 
function minOperations($s, $t, $n
    $ct0 = 0 ; $ct1 = 0; 
    for ($i = 0; $i < $n; $i++) 
    
  
        // Characters are already equal 
        if ($s[$i] == $t[$i]) 
            continue
  
        // Increment count of 0s 
        if ($s[$i] == '0'
            $ct0++; 
  
        // Increment count of 1s 
        else
            $ct1++; 
    
  
    return max($ct0, $ct1); 
  
// Driver code 
$s = "010"; $t = "101"
$n = strlen($s); 
echo minOperations($s, $t, $n); 
  
// This code is contributed by Ryuga
?>

chevron_right


Output:

2

Time Complexity: O(N)



My Personal Notes arrow_drop_up