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