문자열은 문자 배열입니다. . 그리고 이 문제는 문자열의 요소를 대소문자를 번갈아 가며 정렬하는 것입니다.
문제 설명 - 대체 하위 상위 문자열 정렬은 대문자와 소문자가 혼합된 정렬되지 않은 문자열이 제공되고 대문자와 소문자가 대체 위치에 배치되지만 다음 위치에 있는 방식으로 이 문자열을 정렬해야 하는 문제입니다. 정렬된 방식입니다.
주제를 더 잘 이해하기 위해 예를 들어 보겠습니다.
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