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.
Implementation:
C++
// C++ 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;
} |
Java
// 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. |
Python3
# 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 |
C#
// 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. |
Javascript
<script> // Javascript program to count least number // of manipulations to have two // strings set of same characters let MAX_CHAR = 26; // Return the count of manipulations // required function leastCount(s1, s2, n)
{ let count1 = new Array(MAX_CHAR);
let count2 = new Array(MAX_CHAR);
for (let i = 0; i < MAX_CHAR; i++)
{
count1[i] = 0;
count2[i] = 0;
}
// Count the number of different
// characters in both strings
for (let i = 0; i < n; i++)
{
count1[s1[i].charCodeAt(0) -
'a' .charCodeAt(0)] += 1;
count2[s2[i].charCodeAt(0) -
'a' .charCodeAt(0)] += 1;
}
// Check the difference in characters
// by comparing count arrays
let res = 0;
for (let i = 0; i < MAX_CHAR; i++)
{
if (count1[i] != 0)
{
res += Math.abs(count1[i] - count2[i]);
}
}
return res;
} // Driver Code let s1 = "abc" ;
let s2 = "cdd" ;
let len = s1.length; let res = leastCount(s1, s2, len); document.write(res); // This code is contributed by avanitrachhadiya2155 </script> |
Output
2