给定一个字符串str ,该字符串包含大写和小写字符。任务是分别对大写和小写字符进行排序,以便如果原始字符串的第i个位置具有大写字符,则在排序后它不应具有小写字符,反之亦然。
例子:
Input: str = “gEeksfOrgEEkS”
Output: eEfggkEkrEOsS
Input: str = “eDefSR”
Output: eDefRS
方法:这个想法很容易将小写字符和大写字符在两个不同的向量中,并对这两个向量进行排序。然后使用排序的向量获得排序的字符串。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the sorted string
string getSortedString(string s, int n)
{
// Vectors to store the lowercase
// and uppercase characters
vector 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 v1 = new Vector<>();
Vector 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 v1 = new List();
List v2 = new List();
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