Dados dos números enteros positivos A y C , la tarea es verificar si existe un número B tal que A + B = C y B es un anagrama de A. Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, escriba “NO” .
Entrada: A = 123, C = 354
Salida: SI
Explicación:
231 es un anagrama de A y 123 + 231 = 354
Por lo tanto, la salida requerida es “SI”.Entrada: A = 123, C = 234
Salida: NO
Enfoque ingenuo: el enfoque más simple para resolver el problema es generar todas las permutaciones posibles de dígitos de A y verificar si la suma de A y la permutación actual de dígitos de A es igual a C o no. Si se encuentra que es cierto, escriba «SÍ» . De lo contrario, si no se encuentra tal permutación, imprima «NO» .
Complejidad de tiempo: O(log 10 (N)!)
Espacio auxiliar: O(1)
Enfoque eficiente: el enfoque anterior se puede optimizar en función de las siguientes observaciones:
UN + B = C
B = C – UN
Siga los pasos a continuación para resolver el problema:
- Comprueba si (C – A) es un anagrama de A o no . Si se encuentra que es cierto, escriba «SÍ» .
- De lo contrario, escriba “NO” .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std; // Function to check if an integer B exists // such that A + B = C and B is an anagram of A void CheckExistsABCAnagramOfA(int A, int C) { int B = C - A; // Stores A in string format string a = to_string(A); // Stores B in string format string b = to_string(B); // Sort both the strings sort(a.begin(), a.end()); sort(b.begin(), b.end()); // Checks if both strings // are equal if (a == b) { cout << "YES\n"; } else { cout << "NO\n"; } } // Drivers Code int main() { int A = 123, C = 354; CheckExistsABCAnagramOfA(A, C); }
Java
// Java program to implement // the above approach import java.util.*; class GFG { // Function to check if an integer B exists // such that A + B = C and B is an anagram of A static void CheckExistsABCAnagramOfA(int A, int C) { int B = C - A; // Stores A in String format String a = String.valueOf(A); // Stores B in String format String b = String.valueOf(B); // Sort both the Strings a = sortString(a); b = sortString(b); // Checks if both Strings // are equal if (a.equals(b)) { System.out.print("YES\n"); } else { System.out.print("NO\n"); } } static String sortString(String inputString) { // convert input string to char array char tempArray[] = inputString.toCharArray(); // sort tempArray Arrays.sort(tempArray); // return new sorted string return new String(tempArray); } // Drivers Code public static void main(String[] args) { int A = 123, C = 354; CheckExistsABCAnagramOfA(A, C); } } // This code is contributed by shikhasingrajput
Python3
# Python3 program to implement the above # approach # Function to check if an integer B exists # such that A + B = C and B is an anagram of A def CheckExistsABCAnagramOfA(A, C): B = C - A # To convert number to list of integers a = [int(x) for x in str(A)] # To convert number to list of integers b = [int(x) for x in str(B)] # Sort both the strings a.sort() b.sort() # Checks if both strings # are equal if (a == b): print("YES") else: print("NO") # Driver Code A = 123 C = 354 CheckExistsABCAnagramOfA(A, C) # This code is contributed by sanjoy_62
C#
// C# program to implement // the above approach using System; class GFG{ // Function to check if an integer B // exists such that A + B = C and B // is an anagram of A static void CheckExistsABCAnagramOfA(int A, int C) { int B = C - A; // Stores A in String format String a = String.Join("", A); // Stores B in String format String b = String.Join("", B); // Sort both the Strings a = sortString(a); b = sortString(b); // Checks if both Strings // are equal if (a.Equals(b)) { Console.Write("YES\n"); } else { Console.Write("NO\n"); } } static String sortString(String inputString) { // Convert input string to char array char []tempArray = inputString.ToCharArray(); // Sort tempArray Array.Sort(tempArray); // Return new sorted string return new String(tempArray); } // Driver Code public static void Main(String[] args) { int A = 123, C = 354; CheckExistsABCAnagramOfA(A, C); } } // This code is contributed by shikhasingrajput
Javascript
<script> // JavaScript program to implement // the above approach // Function to check if an integer B exists // such that A + B = C and B is an anagram of A function CheckExistsABCAnagramOfA(A, C) { var B = C - A; // Stores A in string format var a = (A.toString()); // Stores B in string format var b = (B.toString()); // Sort both the strings a = a.split('').sort().join(''); b = b.split('').sort().join(''); // Checks if both strings // are equal if (a == b) { document.write( "YES"); } else { document.write( "NO"); } } // Drivers Code var A = 123, C = 354; CheckExistsABCAnagramOfA(A, C); </script>
YES
Complejidad de tiempo: O(log 10 (A)*log(log 10 (A)))
Espacio auxiliar: O(log 10 (A))