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

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

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

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

उदाहरण

#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. - C++ में दिए गए नियमों के साथ तत्वों को हटाकर ऐरे का न्यूनतम संभव आकार ढूंढना

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

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

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