ในปัญหาการเขียนโปรแกรมนี้ เราได้รับสตริงและเราต้องพิมพ์การเรียงสับเปลี่ยนที่แตกต่างกันขององค์ประกอบสตริงที่สามารถสร้างขึ้นได้ เงื่อนไขของปัญหานี้คือสตริงอาจมีอักขระที่จะเกิดขึ้นมากกว่าหนึ่งครั้ง นอกจากนี้ สตริงที่กำหนดจะถูกป้อนตามลำดับการจัดเรียง
มาดูตัวอย่างเพื่อทำความเข้าใจแนวคิดกันดีกว่า
Input : ABD Output : ABD , ADB , BAD , BDA , DAB , DBA INPUT : RSTU OUTPUT : RSTU , RSUT , RTSU , RTUS , RUST , RUTS , SRTU , SRUT , STRU , STUR , SURT , SUTR , TRSU , TRUS , TSRU , TSUR , TURS , TUSR , URST , URTS , USRT , USTR , UTRS , UTSR.
การเรียงสับเปลี่ยน กำลังจัดเรียงองค์ประกอบทั้งหมดของชุดใหม่ตามลำดับหรือประเภทที่เฉพาะเจาะจง จะสั่งชุดหรือไม่สั่งก็ได้
ตอนนี้เราได้เรียนรู้ทุกอย่างเกี่ยวกับปัญหาแล้ว มาลองสร้างตรรกะในการแก้ปัญหากันเถอะ
เรารู้สูตรทางคณิตศาสตร์ที่เกี่ยวข้องกับพีชคณิต จำนวนสตริงทั้งหมดที่สร้างโดยสตริงที่มีอักขระ n ตัวและทุกอักขระไม่ซ้ำกันถูกกำหนดโดย n! หากมีอักขระในสตริงที่ซ้ำกัน จำนวนสตริงจะได้รับโดย n! / i! .
สำหรับสตริง STURS จำนวนสตริงที่สามารถสร้างได้ทั้งหมดคือ 5! / 2! =60. เนื่องจาก s เกิดขึ้น 2 ครั้งในสตริง
การใช้สิ่งนี้ทำให้เราทราบจำนวนสตริงที่สร้างขึ้น ตอนนี้ เราต้องสร้างสตริงเหล่านั้น สำหรับสิ่งนี้ก่อนอื่น เราจะทำการเรียงลำดับสตริง หากไม่เป็นเช่นนั้น (สตริงที่ป้อนจะถูกจัดเรียง) เพื่อให้สตริงสุดท้ายอยู่ในรูปแบบการเรียงลำดับ ตอนนี้ ให้แก้ไขอักขระตัวแรกของสตริงและค้นหาการเรียงสับเปลี่ยนของอักขระที่เหลือทั้งหมดเป็นต้น สิ่งนี้จะทำให้การเรียงสับเปลี่ยนที่จำเป็นทั้งหมดในลักษณะที่เรียงลำดับ
ตัวอย่างเช่น
ป้อนข้อมูล − RST
ตรรกะ −
จากสตริงนี้ทั้งหมด 3! =เรียงสับเปลี่ยนได้ 6 แบบ
มาแก้ไข R และค้นหาพีชคณิตจาก s และ t ซึ่งจะให้ 2 สตริง RST, RTS
การแก้ไข S ในทำนองเดียวกันจะให้ SRT, STR และการแก้ไข T จะให้ TRS, TSR
ดังนั้น สิ่งนี้จะให้ผลลัพธ์เป็น - RST, RTS, SRT, STR, TRS, TSR ซึ่งเรียงตามลำดับ
ตอนนี้ มาสร้างโปรแกรมเพื่อแก้ปัญหานี้กัน
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; bool swaper(char str[], int start, int curr){ for (int i = start; i < curr; i++) if (str[i] == str[curr]) return 0; return 1; } void printPermutations(char str[], int index, int n){ if (index >= n) { cout<<str<<"\t"; return; } for (int i = index; i < n; i++) { bool check = swaper(str, index, i); if (check) { swap(str[index], str[i]); printPermutations(str, index + 1, n); swap(str[index], str[i]); } } } int main(){ char str[] = "AABC"; int n = strlen(str); cout<<"The string is : "<<str<<end; cout<<"The distinct sorted permutations are : \t"; printPermutations(str, 0, n); return 0; }
ผลลัพธ์
The string is : AABC The distinct sorted permutations are : AABC AACB ABAC ABCA ACBA ACAB BAAC BACA BCAA CABA CAAB CBAA