Ordenar una string en orden creciente de prioridades dadas

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:

  1. Inicialice dos variables, digamos dígitos y caracteres , para almacenar los caracteres y dígitos por separado.
  2. Ordene los dígitos y caracteres de las strings con respecto a la tabla ASCII.
  3. 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 .
  4. De manera similar, para los dígitos de la string, separe los dígitos de paridad par e impar, digamos oddDigs y evenDigs .
  5. 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>
Producción: 

1324bdac

 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por coder36 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *