Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में स्ट्रिंग के सभी पैलिंड्रोम क्रमपरिवर्तन प्रिंट करें


इस समस्या में, हमें एक स्ट्रिंग दी गई है और हमें उस स्ट्रिंग के वर्णों से संभव सभी पैलिंड्रोमिक क्रमपरिवर्तन प्रिंट करने हैं।

समस्या को समझने के लिए एक उदाहरण लेते हैं -

इनपुट - स्ट्रिंग = 'aabb'

आउटपुट - abba baab

इस समस्या को हल करने के लिए हमें स्ट्रिंग के वर्णों को लेना होगा और एक-एक करके इन वर्णों का उपयोग करके सभी पैलिंड्रोम स्ट्रिंग उत्पन्न करनी होगी।

चरण 1 - जांचें कि स्ट्रिंग पैलिंड्रोम है या नहीं, यदि नहीं तो 'संभव नहीं' प्रिंट करें।

चरण 2 - यदि यह पैलिंड्रोम बना सकता है, तो इसे आधा करें और स्ट्रिंग के प्रत्येक अक्षर को लेक्सिकोग्राफिकली चुनें।

चरण 3 - बनाए गए क्रमपरिवर्तन के माध्यम से पार करें और सम लंबाई की स्ट्रिंग के लिए आधी तरफ को उल्टा करें और विषम आवृत्ति के लिए, विषम वर्ण को पैलिंड्रोम बनाने के लिए बीच में होना चाहिए।

चरण 4 - बनाए गए सभी पैलिंड्रोम प्रिंट करें।

एल्गोरिदम को लागू करने का प्रोग्राम -

उदाहरण

#include <bits/stdc++.h> using namespace std; #define M 26 bool isPalindrome(string str, int* freq){    memset(freq, 0, M * sizeof(int));    int l = str.length();    for (int i = 0; i < l; i++)       freq[str[i] - 'a']++;    int odd = 0;    for (int i = 0; i < M; i++)       if (freq[i] % 2 == 1)    odd++;    if ((l % 2 == 1 && odd == 1 ) || (l %2 == 0 && odd == 0))       return true;    else       return false; } string reverse(string str){    string rev = str;    reverse(rev.begin(), rev.end());    return rev; } void generatePalindromePermutation(string str){    int freq[M];    if (!isPalindrome(str, freq))    return;    int l = str.length();    string half ="";    char oddC;    for (int i = 0; i < M; i++) {       if(freq[i] % 2 == 1)       oddC = i + 'a';       half += string(freq[i] / 2, i + 'a');    }    string palindrome;    do {       palindrome = half;       if (l % 2 == 1)          palindrome += oddC;       palindrome += reverse(half);       cout<<palindrome<<endl;    }    while (next_permutation(half.begin(), half.end())); } int main() {    string str="abab";    cout<<"All palindrome permutations of "<<str<<" are :\n";    generatePalindromePermutation(str);    return 0; }

आउटपुट

All palindrome permutations of abab are : abba baab

  1. - C++ में बाइनरी स्ट्रिंग में लंबाई k के सभी क्रमचय हैं या नहीं जांचें

    समस्या विवरण एक बाइनरी स्ट्रिंग और पूर्णांक k दिया गया है। जांचें कि स्ट्रिंग में k-बिट बाइनरी संख्याओं के सभी 2^k क्रमचय सबस्ट्रिंग के रूप में मौजूद हैं या नहीं। उदाहरण: str=11001, k=2 → आवश्यक: 00, 01, 10, 11 → सभी मौजूद हैं → YES एल्गोरिदम k लंबाई के सभी 2^k बाइनरी क्रमचय उत्पन्न करें प्रत्ये

  1. - जावा में स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करना

    स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करने के लिए जावा प्रोग्राम निम्नलिखित है: उदाहरण public class Demo{ static void print_permutations(String my_str,String my_ans){ if (my_str.length() == 0){ System.out.print(my_ans + ); return; } boolean m

  1. पायथन प्रोग्राम: दी गई स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करें पायथन प्रोग्राम: दी गई स्ट्रिंग के सभी क्रमपरिवर्तन प्रिंट करें

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक स्ट्रिंग दी गई है, हमें स्ट्रिंग के सभी संभावित क्रमपरिवर्तन प्रदर्शित करने हैं। उदाहरण # रूपांतरण def toString(List): return .join(List) # क्रमपरिवर्तन def permute(a, l, r): if l == r: print(toString(a))