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

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

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

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

  • सम्मिलित करें
  • निकालें
  • बदलें

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

इनपुट: str1 ="kfeod" str2 ="kfcadq"

आउटपुट

Way1:

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

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

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

यहाँ, वर्तमान वर्ण 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] andDP[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' to 'c

  1. सभी संभावित तरीकों से एक पूर्णांक का विभाजन करने के लिए C++ प्रोग्राम

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

  1. मैं सी ++ में डबल को स्ट्रिंग में कैसे परिवर्तित करूं?

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

  1. जांचें कि क्या पायथन में दिए गए बाधाओं के साथ एक स्ट्रिंग को दूसरे में बदलना संभव है

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