Skip to content
Related Articles
Open in App
Not now

Related Articles

Rearrange a string in sorted order followed by the integer sum

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 13 Jul, 2022
Improve Article
Save Article

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) 

This article is contributed by Aarti_Rathi and Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. 


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!