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

सी++ में सबसे लंबे सामान्य उपसर्ग के लिए न्यूनतम शिफ्ट खोजें

मान लीजिए कि हमारे पास दो तार A और B हैं। A और B की लंबाई समान है। एक ही पाली में हम स्ट्रिंग B एक तत्व को घुमा सकते हैं। हमें ए और बी से अधिकतम लंबाई का सामान्य उपसर्ग प्राप्त करने के लिए न्यूनतम आवश्यक शिफ्ट खोजना होगा। इसलिए यदि ए ="कंप्यूटर प्रोग्रामिंग", और बी ="प्रोग्रामिंग भाषा" तो न्यूनतम शिफ्ट 8 है, और उपसर्ग "प्रोग्रामिंग" है।

मान लीजिए हम बी के अंत में स्ट्रिंग बी जोड़ते हैं, तो बी =बी + बी, तो प्रत्येक शिफ्ट के उपसर्ग को अलग से खोजने की आवश्यकता नहीं है। इसलिए हमें बी में मौजूद ए का सबसे लंबा उपसर्ग खोजना होगा, और बी में उपसर्ग की शुरुआती स्थिति, आवश्यक बदलावों की वास्तविक संख्या देगी।

उदाहरण

#include<iostream>
using namespace std;
void KhuthMorrisPatt(int m, int n, string B, string A) {
   int pos = 0, len = 0;
   int p[m + 1];
   int k = 0;
   p[1] = 0;
   for (int i = 2; i <= n; i++) {
      while (k > 0 && A[k] != A[i - 1])
         k = p[k];
      if (A[k] == A[i - 1])
         ++k;
         p[i] = k;
      }
      for (int j = 0, i = 0; i < m; i++) {
         while (j > 0 && A[j] != B[i])
            j = p[j];
         if (A[j] == B[i])
            j++;
         if (j > len) {
            len = j;
            pos = i - j + 1;
         }
   }
   cout << "Shift = " << pos << endl;
   cout << "Prefix = " << A.substr(0, len);
}
int main() {
   string A = "programminglanguage";
   string B = "computerprogramming";
   int n = A.size();
   B = B + B;
   KhuthMorrisPatt(2 * n, n, B, A);
}

आउटपुट

Shift = 8
Prefix = programming

  1. C++ में दी गई सूची में प्रत्येक शब्द के लिए सबसे छोटा अद्वितीय उपसर्ग खोजें

    इस समस्या में, हमें arr[] शब्दों की एक सरणी दी गई है। हमारा काम दी गई सूची में प्रत्येक शब्द के लिए सबसे छोटा अद्वितीय उपसर्ग खोजना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट arr[] = {“learn”, “programming”, “code”} आउटपुट c leap lear p समाधान दृष्टिको

  1. सी ++ में तत्वों को हटाने के लिए दिए गए नियमों के साथ सरणी का न्यूनतम संभव आकार खोजें

    इस समस्या में, हमें n संख्याओं की एक सरणी और एक पूर्णांक मान k दिया जाता है। हमारा कार्य तत्वों को हटाने के लिए दिए गए नियमों के साथ सरणी का न्यूनतम संभव आकार खोजना है। समस्या का विवरण - हमें सरणी में तत्वों की संख्या को कम करने की आवश्यकता है। फॉलो डिलीट ऑपरेशन का उपयोग करके, एक बार में हटाए जा सक

  1. C++ में एक बाइनरी ट्री की न्यूनतम गहराई ज्ञात करें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम बाइनरी ट्री की न्यूनतम गहराई का पता लगाना है। बाइनरी ट्री की एक विशेष शर्त है कि प्रत्येक नोड में अधिकतम दो बच्चे हो सकते हैं। बाइनरी ट्री की न्यूनतम गहराई रूट नोड से किसी भी लीफ नोड के बीच का सबसे छोटा रास्ता है। समस्या को समझने के लिए एक