Dadas dos strings, devuelve el valor del menor número de manipulaciones necesarias para garantizar que ambas strings tengan caracteres idénticos, es decir, ambas strings se convierten en anagramas entre sí.
Ejemplos:
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
Fuente de la pregunta: Yatra.com Experiencia de entrevista | conjunto 7
La idea es crear una array de conteo adicional para ambas strings por separado y luego contar la diferencia en caracteres.
Implementación:
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>
2
Este artículo es una contribución de Mandeep Singh . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA