Open In App

Rearrange a string in sorted order followed by the integer sum

Improve
Improve
Like Article
Like
Save
Share
Report

Given a string containing uppercase alphabets and integer digits (from 0 to 9), the task is to print the alphabets in the order followed by the sum of digits.

Examples:  

Input : AC2BEW3
Output : ABCEW5
Alphabets in the lexicographic order 
followed by the sum of integers(2 and 3).
Recommended Practice

1- Start traversing the given string.
a) If an alphabet comes increment its
occurrence count into a hash_table.
b) If an integer comes then store it
separately by summing up everytime.
2- Using hash_table append all the
characters first into a string and
then at the end, append the integers
sum.
3- Return the resultant string.

Implementation:

C++




// C++ program for above implementation
#include<bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
  
// Function to return string in lexicographic
// order followed by integers sum
string arrangeString(string str)
{
    int char_count[MAX_CHAR] = {0};
    int sum = 0;
  
    // Traverse the string
    for (int i = 0; i < str.length(); i++)
    {
        // Count occurrence of uppercase alphabets
        if (str[i]>='A' && str[i] <='Z')
            char_count[str[i]-'A']++;
  
        //Store sum of integers
        else
            sum = sum + (str[i]-'0');
    }
  
    string res = "";
  
    // Traverse for all characters A to Z
    for (int i = 0; i < MAX_CHAR; i++)
    {
        char ch = (char)('A'+i);
  
        // Append the current character
        // in the string no. of times it
        //  occurs in the given string
        while (char_count[i]--)
            res = res + ch;
    }
  
    // Append the sum of integers
    if (sum > 0)
        res = res + to_string(sum);
  
    // return resultant string
    return res;
}
  
// Driver program
int main()
{
    string str = "ACCBA10D2EW30";
    cout << arrangeString(str);
    return 0;
}


Java




// Java program for above implementation
  
class Test
{
    static final int MAX_CHAR = 26;
      
    // Method to return string in lexicographic
    // order followed by integers sum
    static String arrangeString(String str)
    {
        int char_count[] = new int[MAX_CHAR];
        int sum = 0;
       
        // Traverse the string
        for (int i = 0; i < str.length(); i++)
        {
            // Count occurrence of uppercase alphabets
            if (Character.isUpperCase(str.charAt(i)))
                char_count[str.charAt(i)-'A']++;
       
            //Store sum of integers
            else
                sum = sum + (str.charAt(i)-'0');
              
        }
       
        String res = "";
       
        // Traverse for all characters A to Z
        for (int i = 0; i < MAX_CHAR; i++)
        {
            char ch = (char)('A'+i);
       
            // Append the current character
            // in the string no. of times it
            //  occurs in the given string
            while (char_count[i]-- != 0)
                res = res + ch;
        }
       
        // Append the sum of integers
        if (sum > 0)
            res = res + sum;
       
        // return resultant string
        return res;
    }
      
    // Driver method
    public static void main(String args[]) 
    {
        String str = "ACCBA10D2EW30";
        System.out.println(arrangeString(str));
    }
}


Python3




# Python3 program for above implementation
MAX_CHAR = 26
  
# Function to return string in lexicographic
# order followed by integers sum
def arrangeString(string):
    char_count = [0] * MAX_CHAR
    s = 0
  
    # Traverse the string
    for i in range(len(string)):
  
        # Count occurrence of uppercase alphabets
        if string[i] >= "A" and string[i] <= "Z":
            char_count[ord(string[i]) - ord("A")] += 1
  
        # Store sum of integers
        else:
            s += ord(string[i]) - ord("0")
  
    res = ""
  
    # Traverse for all characters A to Z
    for i in range(MAX_CHAR):
        ch = chr(ord("A") + i)
  
        # Append the current character
        # in the string no. of times it
        # occurs in the given string
        while char_count[i]:
            res += ch
            char_count[i] -= 1
  
    # Append the sum of integers
    if s > 0:
        res += str(s)
  
    # return resultant string
    return res
  
# Driver code
if __name__ == "__main__":
    string = "ACCBA10D2EW30"
    print(arrangeString(string))
  
# This code is contributed by
# sanjeev2552


C#




// C# program for above implementation
using System;
  
class GFG {
      
    static int MAX_CHAR = 26;
      
    // Method to return string in lexicographic
    // order followed by integers sum
    static String arrangeString(string str)
    {
        int []char_count = new int[MAX_CHAR];
        int sum = 0;
      
        // Traverse the string
        for (int i = 0; i < str.Length; i++)
        {
              
            // Count occurrence of uppercase 
            // alphabets
            if (char.IsUpper(str[i]))
                char_count[str[i]-'A']++;
      
            //Store sum of integers
            else
                sum = sum + (str[i]-'0');
              
        }
      
        string res = "";
      
        // Traverse for all characters A to Z
        for (int i = 0; i < MAX_CHAR; i++)
        {
            char ch = (char)('A' + i);
      
            // Append the current character
            // in the string no. of times it
            // occurs in the given string
            while (char_count[i]-- != 0)
                res = res + ch;
        }
      
        // Append the sum of integers
        if (sum > 0)
            res = res + sum;
      
        // return resultant string
        return res;
    }
      
    // Driver method
    public static void Main() 
    {
        string str = "ACCBA10D2EW30";
        Console.Write(arrangeString(str));
    }
}
  
// This code is contributed by nitin mittal.


PHP




<?php 
// PHP program for above implementation
  
$MAX_CHAR = 26;
  
// Function to return string in lexicographic
// order followed by integers sum
function arrangeString($str)
{
    global $MAX_CHAR;
    $char_count = array_fill(0, $MAX_CHAR, NULL);
    $sum = 0;
  
    // Traverse the string
    for ($i = 0; $i < strlen($str); $i++)
    {
        // Count occurrence of uppercase alphabets
        if ($str[$i] >= 'A' && $str[$i] <= 'Z')
            $char_count[ord($str[$i]) -     
                        ord('A')]++;
  
        // Store sum of integers
        else
            $sum = $sum + (ord($str[$i]) - 
                           ord('0'));
    }
  
    $res = "";
  
    // Traverse for all characters A to Z
    for ($i = 0; $i < $MAX_CHAR; $i++)
    {
        $ch = chr(ord('A') + $i);
  
        // Append the current character
        // in the string no. of times it
        // occurs in the given string
        while ($char_count[$i]--)
            $res = $res . $ch;
    }
  
    // Append the sum of integers
    if ($sum > 0)
        $res = $res . strval($sum);
  
    // return resultant string
    return $res;
}
  
// Driver Code
$str = "ACCBA10D2EW30";
echo arrangeString($str);
  
// This code is contributed by ita_c
?>


Javascript




<script>
  
// Javascript program for above implementation
      
    let MAX_CHAR = 26;
      
    // Method to return string in lexicographic
    // order followed by integers sum
    function arrangeString(str)
    {
        let char_count = new Array(MAX_CHAR);
        for(let i=0;i<MAX_CHAR;i++)
        {
            char_count[i]=0;
        }
        let sum = 0;
         
        // Traverse the string
        for (let i = 0; i < str.length; i++)
        {
            // Count occurrence of uppercase alphabets
            if (str[i] >= "A" && str[i] <= "Z")
                char_count[str[i].charCodeAt(0)-
                'A'.charCodeAt(0)]++;
         
            //Store sum of integers
            else
                sum = sum + (str[i].charCodeAt(0)-
                '0'.charCodeAt(0));
                
        }
         
        let res = "";
         
        // Traverse for all characters A to Z
        for (let i = 0; i < MAX_CHAR; i++)
        {
            let ch = 
            String.fromCharCode('A'.charCodeAt(0)+i);
         
            // Append the current character
            // in the string no. of times it
            //  occurs in the given string
            while (char_count[i]-- != 0)
                res = res + ch;
        }
         
        // Append the sum of integers
        if (sum > 0)
            res = res + sum;
         
        // return resultant string
        return res;
    }
      
     // Driver method
    let str = "ACCBA10D2EW30";
    document.write(arrangeString(str));
      
    // This code is contributed by avanitrachhadiya2155
      
</script>


Output

AABCCDEW6

Time Complexity: O(n)
Auxiliary Space: O(n) 

 



Last Updated : 15 Sep, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads