Given a string str consisting of uppercase and lowercase characters. The task is to sort uppercase and lowercase characters separately such that if the ith place in the original string had an uppercase character then it should not have a lowercase character after being sorted and vice versa.
Examples:
Input: str = “gEeksfOrgEEkS”
Output: eEfggkEkrEOsSInput: str = “eDefSR”
Output: eDefRS
Approach: The idea is simple to store lower case characters and upper case characters in two different vectors and sort both of the vectors. Then use the sorted vectors to get the sorted string.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the sorted string string getSortedString(string s, int n) { // Vectors to store the lowercase // and uppercase characters vector< char > v1, v2; for ( int i = 0; i < n; i++) { if (s[i] >= 'a' && s[i] <= 'z' ) v1.push_back(s[i]); if (s[i] >= 'A' && s[i] <= 'Z' ) v2.push_back(s[i]); } // Sort both the vectors sort(v1.begin(), v1.end()); sort(v2.begin(), v2.end()); int i = 0, j = 0; for ( int k = 0; k < n; k++) { // If current character is lowercase // then pick the lowercase character // from the sorted list if (s[k] >= 'a' && s[k] <= 'z' ) { s[k] = v1[i]; ++i; } // Else pick the uppercase character else if (s[k] >= 'A' && s[k] <= 'Z' ) { s[k] = v2[j]; ++j; } } // Return the sorted string return s; } // Driver code int main() { string s = "gEeksfOrgEEkS" ; int n = s.length(); cout << getSortedString(s, n); return 0; } |
Java
// Java implementation of the approach import java.util.Collections; import java.util.Vector; class GFG{ // Function to return the sorted string public static String getSortedString(StringBuilder s, int n) { // Vectors to store the lowercase // and uppercase characters Vector<Character> v1 = new Vector<>(); Vector<Character> v2 = new Vector<>(); for ( int i = 0 ; i < n; i++) { if (s.charAt(i) >= 'a' && s.charAt(i) <= 'z' ) v1.add(s.charAt(i)); if (s.charAt(i) >= 'A' && s.charAt(i) <= 'z' ) v2.add(s.charAt(i)); } // Sort both the vectors Collections.sort(v1); Collections.sort(v2); int i = 0 , j = 0 ; for ( int k = 0 ; k < n; k++) { // If current character is lowercase // then pick the lowercase character // from the sorted list if (s.charAt(k) > = 'a' && s.charAt(k) <= 'z' ) { s.setCharAt(k, v1.elementAt(i)); ++i; } // Else pick the uppercase character else if (s.charAt(k) > = 'A' && s.charAt(k) <= 'Z' ) { s.setCharAt(k, v2.elementAt(j)); ++j; } } // Return the sorted string return s.toString(); } // Driver code public static void main(String[] args) { StringBuilder s = new StringBuilder( "gEeksfOrgEEkS" ); int n = s.length(); System.out.println(getSortedString(s, n)); } } // This code is contributed by // sanjeev2552 |
Python3
# Python3 implementation of the approach # Function to return the sorted string def getSortedString(s, n): # Vectors to store the lowercase # and uppercase characters v1 = [] v2 = [] for i in range (n): if (s[i] > = 'a' and s[i] < = 'z' ): v1.append(s[i]) if (s[i] > = 'A' and s[i] < = 'Z' ): v2.append(s[i]) # Sort both the vectors v1 = sorted (v1) v2 = sorted (v2) i = 0 j = 0 for k in range (n): # If current character is lowercase # then pick the lowercase character # from the sorted list if (s[k] > = 'a' and s[k] < = 'z' ): s[k] = v1[i] i + = 1 # Else pick the uppercase character elif (s[k] > = 'A' and s[k] < = 'Z' ): s[k] = v2[j] j + = 1 # Return the sorted string return "".join(s) # Driver code s = "gEeksfOrgEEkS" ss = [i for i in s] n = len (ss) print (getSortedString(ss, n)) # This code is contributed by mohit kumar 29 |
C#
// C# implementation of the approach using System; using System.Collections.Generic; class GFG { // Function to return the sorted string public static String getSortedString( char [] s, int n) { // Vectors to store the lowercase // and uppercase characters List< char > v1 = new List< char >(); List< char > v2 = new List< char >(); int i = 0; for (i = 0; i < n; i++) { if (s[i] > 'a' && s[i] <= 'z' ) v1.Add(s[i]); if (s[i] > 'A' && s[i] <= 'z' ) v2.Add(s[i]); } // Sort both the vectors v1.Sort(); v2.Sort(); int j = 0; i = 0; for ( int k = 0; k < n; k++) { // If current character is lowercase // then pick the lowercase character // from the sorted list if (s[k] > 'a' && s[k] <= 'z' ) { s[k] = v1[i]; ++i; } // Else pick the uppercase character else if (s[k] > 'A' && s[k] <= 'Z' ) { s[k] = v2[j]; ++j; } } // Return the sorted string return String.Join( "" , s); } // Driver code public static void Main(String[] args) { String s = "gEeksfOrgEEkS" ; int n = s.Length; Console.WriteLine(getSortedString(s.ToCharArray(), n)); } } // This code is contributed by PrinciRaj1992 |
eEfggkEkrEOsS
https://youtu.be/icb4ydeBN9g
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.