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

• Difficulty Level : Easy
• Last Updated : 30 Apr, 2021

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++

 // C++ program to count least number// of manipulations to have two strings// set of same characters#include using namespace std; const int MAX_CHAR = 26; // return the count of manipulations// requiredint 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 programint main(){    string s1 = "abc";    string s2 = "cdd";    int len = s1.length();    int res = leastCount(s1, s2, len);    cout << res << endl;    return 0;}

Java

 // Java program to count least number// of manipulations to have two// strings set of same charactersimport 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.

Python3

 # Python3 program to count least number# of manipulations to have two strings# set of same charactersMAX_CHAR = 26 # return the count of manipulations# requireddef leastCount(s1, s2, n):     count1 =  * MAX_CHAR    count2 =  * 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 Codeif __name__ == "__main__":     s1 = "abc"    s2 = "cdd"    l = len(s1)    res = leastCount(s1, s2, l)    print (res) # This code is contributed by ita_c

C#

 // C# program to count least number// of manipulations to have two strings// set of same charactersusing 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.

Javascript



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 write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.