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

C++ में एक स्ट्रिंग को दूसरी स्ट्रिंग में बदलने के सभी संभावित तरीके प्रिंट करें


इस समस्या में, हमें दो स्ट्रिंग्स str1 and str2. दी गई हैं। हमारा कार्य एक स्ट्रिंग को दूसरी स्ट्रिंग में बदलने के सभी संभावित तरीके प्रिंट करने के लिए एक प्रोग्राम बनाना है। 

समस्या विवरण: यहां, हमें उन सभी संभावित तरीकों को खोजने की आवश्यकता है जिनका उपयोग करके हम str1 को str2 में बदल सकते हैं। रूपांतरण के दौरान, हम तीन ऑपरेशन्स में से कोई भी कर सकते हैं,

  • इंसर्ट 
  • रिमूव
  • रिप्लेस

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

इनपुट: str1 = “kfeod” str2 = “kfcadq”

आउटपुट

Way1:

Insert q, after d. Replace c by e. Replace o by a.

समाधान दृष्टिकोण

हम पहले न्यूनतम संपादनों की संख्या खोजेंगे और फिर एक DP मैट्रिक्स बनाएंगे। फिर जांचेंगे कि क्या दोनों स्ट्रिंग्स में एलिमेंट से संबंधित कैरेक्टर बराबर है, तो संशोधित न करें अन्यथा अंतिम एलिमेंट से कॉपी करके अपडेट करें।

यहां, वर्तमान कैरेक्टर DP[i][j] = DP[i-1][j-1]। जांचें कि क्या str1 का (i-1)वां एलिमेंट और str2 का (j-1)वां एलिमेंट बराबर हैं, तो DP में विकर्ण रूप से ट्रैवर्स करें।

अब, यदि str1 का (i-1)वां एलिमेंट और str2 का (j-1)वां एलिमेंट बराबर नहीं हैं। DP[i][j] का मान (DP[i-1][j-1], DP[i][j-1] और DP[i-1][j] में से न्यूनतम मान) + 1 है।

यह विधि एक स्ट्रिंग को दूसरी में बदलने का एक तरीका प्रिंट कर सकती है। सभी तरीकों को प्रिंट करने की विधि थोड़ी जटिल है जो स्ट्रिंग्स के वेक्टर जैसे उन्नत डेटा स्ट्रक्चर का उपयोग करती है और हम इसके बारे में बाद में सीखेंगे।

हमारे दृष्टिकोण के कार्य को दर्शाने वाला प्रोग्राम,

उदाहरण

#include <iostream> using namespace std; int DP[100][100]; void findWays(string str1, string str2) {        int len1 = str1.length();    int len2 = str2.length();    int i, j;    DP[len1 + 1][len2 + 1];    for (i = 0; i <= len1; i++)       DP[i][0] = i;    for (j = 0; j <= len2; j++)       DP[0][j] = j;    for (i = 1; i <= len1; i++) {       for (j = 1; j <= len2; j++) {          if (str1[i - 1] == str2[j - 1])             DP[i][j] = DP[i - 1][j - 1];          else             DP[i][j] = (min(min(DP[i - 1][j - 1], DP[i - 1][j]), DP[i][j - 1])) + 1;       }    }    while (len1 and len2) {       if (str1[len1 - 1] == str2[len2 - 1]) {                    len1--;          len2--;       }       else if (DP[len1][len2] == DP[len1-1][len2-1] + 1) {                    cout<<"\nModify '"<<str1[len1-1]<<"' to '"<<str2[len2-1];          len1--;          len2--;       }       else if (DP[len1][len2] == DP[len1-1][len2] + 1) {                    cout<<"\nRemove "<<str1[len1-1]<<"'";          len1--;       }       else if (DP[len1][len2] == DP[len1][len2-1] + 1) {                    cout <<"\nInsert '"<<str2[len2-1]<<"'";          len2--;       }    } } int main() {        string str1 = "kfeodge";    string str2 = "kfcadqpe";    cout<<"Way to convert one string into another string is ";    findWays(str1, str2);    return 0; }

आउटपुट

Way to convert one string into another string is Modify 'g' to 'p Insert 'q' Modify 'o' to 'a Modify 'e' को 'c

  1. - C++ प्रोग्राम: एक इंटीजर के सभी संभावित तरीकों से पार्टीशन करना

    यहां एक C++ प्रोग्राम है जो दिए गए इंटीजर के सभी यूनिक पार्टीशन प्राप्त करता है जैसे कि एक पार्टीशन का योग एक इंटीजर परिणाम देता है। इस प्रोग्राम में, एक पॉजिटिव इंटीजर n दिया जाता है, और n को पॉजिटिव इंटीजर्स के योग के रूप में प्रस्तुत करने के सभी संभावित यूनिक तरीके जनरेट करें। एल्गोरिदम Begin

  1. - C++ में डबल को स्ट्रिंग में कैसे कन्वर्ट करें?

    C++ में std::to_string का उपयोग करके डबल को स्ट्रिंग में कन्वर्ट किया जा सकता है। आवश्यक पैरामीटर एक डबल मान है और एक स्ट्रिंग ऑब्जेक्ट लौटाया जाता है जिसमें डबल मान कैरेक्टर्स के अनुक्रम के रूप में होता है। C++ में इसे प्रदर्शित करने वाला एक प्रोग्राम निम्नलिखित है। उदाहरण #include <iostream>

  1. - Python में दिए गए प्रतिबंधों के साथ एक स्ट्रिंग को दूसरी में बदलने की संभावना की जांच कैसे करें?

    मान लीजिए हमारे पास केवल तीन वर्णों A, B और # वाली दो स्ट्रिंग्स s और t हैं। हमें यह जांचना है कि क्या s पर ये ऑपरेशन करके s को t में बदलना संभव है। A केवल बाईं ओर जा सकता है B केवल दाईं ओर जा सकता है न तो A और न ही B एक दूसरे को पार कर सकते हैं तो, यदि इनपुट s = ##AB##B, t = A###B#B है, तो आउटपु