Dada una string alfanumérica S de longitud N , la tarea es clasificar la string en orden creciente de prioridad según las siguientes condiciones:
- Los caracteres con valores ASCII pares tienen mayor prioridad que los caracteres con valores ASCII impares.
- Los dígitos pares tienen mayor prioridad que los dígitos impares.
- Los dígitos tienen mayor prioridad que los caracteres.
- Para caracteres o dígitos que tienen la misma paridad, la prioridad es en orden creciente de sus valores ASCII.
Ejemplos:
Entrada: S = “abcd1234”
Salida: 1324bdac
Explicación:
El valor ASCII de “a” es 97.
El valor ASCII de “b” es 98.
El valor ASCII de “c” es 99.
El valor ASCII de “d” es 100.
Dado que los caracteres con valor ASCII par tienen mayor prioridad, «b» y «d» se colocan primero, seguidos de «a» y «c».
Del mismo modo, los dígitos pares tienen más prioridad que los dígitos impares. Por lo tanto, se colocan primero.
Dado que los números tienen una prioridad más alta que los caracteres, la string ordenada es «1324bdac»Entrada: S = “adb123”
Salida: bda132
Planteamiento: La idea es separar los caracteres con valores ASCII pares e impares y también los dígitos con paridad par e impar. Luego, una estas substrings en el orden de sus prioridades. Siga los pasos a continuación para resolver el problema:
- Inicialice dos variables, digamos dígitos y caracteres , para almacenar los caracteres y dígitos por separado.
- Ordene los dígitos y caracteres de las strings con respecto a la tabla ASCII.
- Ahora, recorra todos los caracteres en caracteres y agregue cada carácter con una paridad impar a una variable, digamos oddChars, y cada carácter con una paridad par a otra variable, digamos evenChars .
- De manera similar, para los dígitos de la string, separe los dígitos de paridad par e impar, digamos oddDigs y evenDigs .
- Finalmente, concatene la string como oddChars + evenChars + oddDigs + evenDigs .
A continuación se muestra la implementación del enfoque anterior:
C++14
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to sort the string s // based on the given conditions string sortString(string s) { // Stores digits of given string string digits = ""; // Stores characters of given string string character = ""; // Iterate over characters of the string for (int i = 0; i < s.size(); ++i) { if (s[i] >= '0' && s[i] <= '9') { digits += s[i]; } else { character += s[i]; } } // Sort the string of digits sort(digits.begin(), digits.end()); // Sort the string of characters sort(character.begin(), character.end()); // Stores odd and even characters string OddChar = "", EvenChar = ""; // Separate odd and even digits for (int i = 0; i < digits.length(); ++i) { if ((digits[i] - '0') % 2 == 1) { OddChar += digits[i]; } else { EvenChar += digits[i]; } } // Concatenate strings in the order // odd characters followed by even OddChar += EvenChar; EvenChar = ""; // Separate the odd and even chars for (int i = 0; i < character.length(); ++i) { if ((character[i] - 'a') % 2 == 1) { OddChar += character[i]; } else { EvenChar += character[i]; } } // Final string OddChar += EvenChar; // Return the final string return OddChar; } // Driver Code int main() { // Given string string s = "abcd1234"; // Returns the sorted string cout << sortString(s); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG { // Function to sort the String s // based on the given conditions static String sortString(String s) { // Stores digits of given String String digits = ""; // Stores characters of given String String character = ""; // Iterate over characters of the String for (int i = 0; i < s.length(); ++i) { if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { digits += s.charAt(i); } else { character += s.charAt(i); } } // Sort the String of digits digits = sort(digits); // Sort the String of characters character = sort(character); // Stores odd and even characters String OddChar = "", EvenChar = ""; // Separate odd and even digits for (int i = 0; i < digits.length(); ++i) { if ((digits.charAt(i) - '0') % 2 == 1) { OddChar += digits.charAt(i); } else { EvenChar += digits.charAt(i); } } // Concatenate Strings in the order // odd characters followed by even OddChar += EvenChar; EvenChar = ""; // Separate the odd and even chars for (int i = 0; i < character.length(); ++i) { if ((character.charAt(i) - 'a') % 2 == 1) { OddChar += character.charAt(i); } else { EvenChar += character.charAt(i); } } // Final String OddChar += EvenChar; // Return the final String return OddChar; } static String sort(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); } // Driver Code public static void main(String[] args) { // Given String String s = "abcd1234"; // Returns the sorted String System.out.print(sortString(s)); } } // This code is contributed by shikhasingrajput
Python3
# Python3 program for the above approach # Function to sort the string s # based on the given conditions def sortString(s): # Stores digits of given string digits = "" # Stores characters of given string character = "" # Iterate over characters of the string for i in range(len(s)): if (s[i] >= '0' and s[i] <= '9'): digits += s[i] else: character += s[i] # Sort the string of digits Digits = list(digits) Digits.sort() # Sort the string of characters Character = list(character) Character.sort() # Stores odd and even characters OddChar, EvenChar = "", "" # Separate odd and even digits for i in range(len(Digits)): if ((ord(digits[i]) - ord('0')) % 2 == 1): OddChar += Digits[i] else: EvenChar += Digits[i] # Concatenate strings in the order # odd characters followed by even OddChar += EvenChar EvenChar = "" # Separate the odd and even chars for i in range(len(Character)): if ((ord(Character[i]) - ord('a')) % 2 == 1): OddChar += Character[i] else: EvenChar += Character[i] # Final string OddChar += EvenChar # Return the final string return OddChar # Driver Code # Given string s = "abcd1234" # Returns the sorted string print(sortString(list(s))) # This code is contributed by divyesh072019
C#
// C# program for the above approach using System; class GFG { // Function to sort the string s // based on the given conditions static string sortString(char[] s) { // Stores digits of given string string digits = ""; // Stores characters of given string string character = ""; // Iterate over characters of the string for (int i = 0; i < s.Length; ++i) { if (s[i] >= '0' && s[i] <= '9') { digits += s[i]; } else { character += s[i]; } } // Sort the string of digits char[] Digits = digits.ToCharArray(); Array.Sort(Digits); // Sort the string of characters char[] Character = character.ToCharArray(); Array.Sort(Character); // Stores odd and even characters string OddChar = "", EvenChar = ""; // Separate odd and even digits for (int i = 0; i < Digits.Length; ++i) { if ((digits[i] - '0') % 2 == 1) { OddChar += Digits[i]; } else { EvenChar += Digits[i]; } } // Concatenate strings in the order // odd characters followed by even OddChar += EvenChar; EvenChar = ""; // Separate the odd and even chars for (int i = 0; i < Character.Length; ++i) { if ((Character[i] - 'a') % 2 == 1) { OddChar += Character[i]; } else { EvenChar += Character[i]; } } // Final string OddChar += EvenChar; // Return the final string return OddChar; } // Driver code static void Main() { // Given string string s = "abcd1234"; // Returns the sorted string Console.WriteLine(sortString(s.ToCharArray())); } } // This code is contributed by divyehrabadiya07
Javascript
<script> // Javascript program for the above approach // Function to sort the string s // based on the given conditions function sortString(s) { // Stores digits of given string let digits = ""; // Stores characters of given string let character = ""; // Iterate over characters of the string for (let i = 0; i < s.length; ++i) { if (s[i].charCodeAt() >= '0'.charCodeAt() && s[i].charCodeAt() <= '9'.charCodeAt()) { digits += s[i]; } else { character += s[i]; } } // Sort the string of digits let Digits = digits.split(''); Digits.sort(); // Sort the string of characters let Character = character.split(''); Character.sort(); // Stores odd and even characters let OddChar = "", EvenChar = ""; // Separate odd and even digits for (let i = 0; i < Digits.length; ++i) { if ((digits[i].charCodeAt() - '0'.charCodeAt()) % 2 == 1) { OddChar += Digits[i]; } else { EvenChar += Digits[i]; } } // Concatenate strings in the order // odd characters followed by even OddChar += EvenChar; EvenChar = ""; // Separate the odd and even chars for (let i = 0; i < Character.length; ++i) { if ((Character[i].charCodeAt() - 'a'.charCodeAt()) % 2 == 1) { OddChar += Character[i]; } else { EvenChar += Character[i]; } } // Final string OddChar += EvenChar; // Return the final string return OddChar; } // Given string let s = "abcd1234"; // Returns the sorted string document.write(sortString(s.split(''))); // This code is contributed by suresh07. </script>
1324bdac
Complejidad temporal: O(N)
Espacio auxiliar: O(N)