字符串是字符数组。这个问题是用大写和小写交替对字符串的元素进行排序。
问题描述-替代的小写大写字符串排序是一个问题,其中我们提供了一个无序的字符串,其中包含大小写混合的字符,我们需要对字符串进行排序,以便将大写和小写字符置于交替的位置,但以一种排序的方式。
让我们举个例子来更好地理解这个话题,
Input : aFegrAfStRzsV Output : AaFeRfSgVrstz Explanation : Upper case characters : A F R S V Lower case characters : a e f g r s t z
两者都是经过排序的方式,因此我们现在可以将它们交替放置。
现在,既然我们已经了解了问题所在。让我们为其创建一个解决方案。一种方法是按排序顺序为大写和小写字母创建数组,然后在最终字符串中交替使用它们。我们基于此逻辑创建了一种算法。
Step 1 : In an array lowercount[] add all lowercase characters in sorted order. Step 2 : In an array uppercount[] add all uppercase characters in sorted order. Step 3 : Create the final string using alternate values from both arrays. Step 4 : Print the result array.
#include <iostream>
using namespace std;
#define MAX 26
void alternateULSort(string& s) ;
int main(){
string str = "aFegrAfStRzsV";
cout<<"The unsorted string is : "<<str;
cout<<"\nThe alternate lower upper sorted string is ";
alternateULSort(str);
cout << str << "\n";
}
void alternateULSort(string& s){
int n = s.length();
int lowerCount[MAX] = { 0 }, upperCount[MAX] = { 0 };
for (int i = 0; i < n; i++) {
if (isupper(s[i]))
upperCount[s[i] - 'A']++;
else
lowerCount[s[i] - 'a']++;
}
int i = 0, j = 0, k = 0;
while (k < n) {
while (i < MAX && upperCount[i] == 0)
i++;
if (i < MAX) {
s[k++] = 'A' + i;
upperCount[i]--;
}
while (j < MAX && lowerCount[j] == 0)
j++;
if (j < MAX) {
s[k++] = 'a' + j;
lowerCount[j]--;
}
}
}输出结果
The unsorted string is : aFegrAfStRzsV The alternate lower upper sorted string is AaFeRfSgVrstz