Least number of manipulations needed to ensure two strings have identical characters

Given two strings return the value of least number of manipulations needed to ensure both strings have identical characters, i.e., both string become anagram of each other.

Examples:

Input : s1 = "aab"
        s2 = "aba" 
Output :  2
Explanation : string 1 contains 2 a's and 1 b, 
also string 2 contains same characters

Input : s1 = "abc"
        s2 = "cdd"
Output : 2
Explanation : string 1 contains 1 a, 1 b, 1 c
while string 2 contains 1 c and 2 d's
so there are 2 different characters

Question Source : Yatra.com Interview Experience | Set 7



The idea is to create a extra count array for both the strings separately and then count the difference in characters.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to count least number
// of manipulations to have two strings
// set of same characters
#include <bits/stdc++.h>
using namespace std;
  
const int MAX_CHAR = 26;
  
// return the count of manipulations
// required
int leastCount(string s1, string s2, int n)
{
    int count1[MAX_CHAR] = { 0 };
    int count2[MAX_CHAR] = { 0 };
  
    // count the number of different
    // characters in both strings
    for (int i = 0; i < n; i++) {
        count1[s1[i] - 'a'] += 1;
        count2[s2[i] - 'a'] += 1;
    }
  
    // check the difference in characters
    // by comparing count arrays
    int res = 0;
    for (int i = 0; i < MAX_CHAR; i++) {
        if (count1[i] != 0) {
            res += abs(count1[i] - count2[i]);
        }
    }
    return res;
}
  
// driver program
int main()
{
    string s1 = "abc";
    string s2 = "cdd";
    int len = s1.length();
    int res = leastCount(s1, s2, len);
    cout << res << endl;
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// java program to count least number
// of manipulations to have two
// strings set of same characters
import java.io.*;
  
public class GFG {
  
    static int MAX_CHAR = 26;
  
    // return the count of manipulations
    // required
    static int leastCount(String s1,
                        String s2, int n)
    {
          
        int[] count1 = new int[MAX_CHAR];
        int[] count2 = new int[MAX_CHAR];
  
        // count the number of different
        // characters in both strings
        for (int i = 0; i < n; i++) 
        {
            count1[s1.charAt(i) - 'a'] += 1;
            count2[s2.charAt(i) - 'a'] += 1;
        }
  
        // check the difference in characters
        // by comparing count arrays
        int res = 0;
          
        for (int i = 0; i < MAX_CHAR; i++)
        {
            if (count1[i] != 0) {
                res += Math.abs(count1[i] 
                                 - count2[i]);
            }
        }
          
        return res;
    }
  
    // driver program
    static public void main(String[] args)
    {
        String s1 = "abc";
        String s2 = "cdd";
        int len = s1.length();
        int res = leastCount(s1, s2, len);
          
        System.out.println(res);
    }
}
  
// This code is contributed by vt_m.

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to count least number
# of manipulations to have two strings
# set of same characters
MAX_CHAR = 26
  
# return the count of manipulations
# required
def leastCount(s1, s2, n):
  
    count1 = [0] * MAX_CHAR
    count2 = [0] * MAX_CHAR
  
    # count the number of different
    # characters in both strings
    for i in range ( n):
        count1[ord(s1[i]) - ord('a')] += 1
        count2[ord(s2[i]) - ord('a')] += 1
  
    # check the difference in characters
    # by comparing count arrays
    res = 0
    for i in range (MAX_CHAR):
        if (count1[i] != 0):
            res += abs(count1[i] - count2[i])
      
    return res
  
# Driver Code
if __name__ == "__main__":
  
    s1 = "abc"
    s2 = "cdd"
    l = len(s1)
    res = leastCount(s1, s2, l)
    print (res)
  
# This code is contributed by ita_c

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to count least number
// of manipulations to have two strings
// set of same characters
using System;
  
public class GFG {
  
    static int MAX_CHAR = 26;
  
    // return the count of manipulations
    // required
    static int leastCount(string s1, 
                        string s2, int n)
    {
          
        int[] count1 = new int[MAX_CHAR];
        int[] count2 = new int[MAX_CHAR];
  
        // count the number of different
        // characters in both strings
        for (int i = 0; i < n; i++)
        {
            count1[s1[i] - 'a'] += 1;
            count2[s2[i] - 'a'] += 1;
        }
  
        // check the difference in characters
        // by comparing count arrays
        int res = 0;
        for (int i = 0; i < MAX_CHAR; i++)
        {
            if (count1[i] != 0) {
                res += Math.Abs(count1[i] 
                                - count2[i]);
            }
        }
          
        return res;
    }
  
    // driver program
    static public void Main()
    {
        string s1 = "abc";
        string s2 = "cdd";
        int len = s1.Length;
        int res = leastCount(s1, s2, len);
        Console.WriteLine(res);
    }
}
  
// This code is contributed by vt_m.

chevron_right



Output:

2

This article is contributed by Mandeep Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up

Improved By : vt_m, chitranayal



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.