Open In App

Rearrange a string in sorted order followed by the integer sum

Last Updated : 15 Sep, 2023
Comments
Improve
Suggest changes
Like Article
Like
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) 

 


Next Article
Article Tags :
Practice Tags :

Similar Reads