สตริงคืออาร์เรย์ของอักขระ . และปัญหานี้คือการจัดเรียงองค์ประกอบของสตริงด้วยตัวพิมพ์ใหญ่และตัวพิมพ์เล็กสลับกัน
คำอธิบายปัญหา − การจัดเรียงสตริงบนสลับล่าง เป็นปัญหาที่เราจัดเตรียมสตริงที่ไม่เรียงลำดับซึ่งมีอักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็กผสมกันและเราจำเป็นต้องจัดเรียงสตริงนี้ในลักษณะที่อักขระตัวพิมพ์ใหญ่และตัวพิมพ์เล็กอยู่ในตำแหน่งอื่น แต่อยู่ใน อย่างเป็นระเบียบ
มาดูตัวอย่างเพื่อทำความเข้าใจหัวข้อกันดีกว่า
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