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

C++ में स्ट्रिंग का अपने सभी प्रत्ययों के साथ समानता का योग


समस्या विवरण

इस समस्या में, हमें एक स्ट्रिंग str दी गई है। हमारा कार्य स्ट्रिंग का अपने सभी प्रत्ययों (suffixes) के साथ समानता का योग ज्ञात करने के लिए एक प्रोग्राम बनाना है।

स्ट्रिंग str के प्रत्यय वे सभी स्ट्रिंग्स हैं जो स्ट्रिंग के प्रारंभिक वर्णों को हटाकर बनाई जाती हैं।

स्ट्रिंग्स की समानता str1 और str2 दोनों स्ट्रिंग्स के लिए सबसे लंबे सामान्य उपसर्ग (longest common prefix) की लंबाई है। उदाहरण के लिए, str1 = 'abbac' और str2 = 'abb' की समानता 3 है।

जबकि str1 = 'abca' और str2 = 'ca' की समानता 0 है। क्योंकि हम शुरुआत से गिनते हैं।

उदाहरण

इनपुट - str = 'xyxyx'

आउटपुट -

व्याख्या - स्ट्रिंग के सभी उपस्ट्रिंग्स और सभी प्रत्ययों के साथ समानता -

'xyxyx' -> 5
'yxyx' -> 0
'xyx' -> 3
'yx' -> 0
'x' -> 1
योग = 5 + 0 + 3 + 0 + 1 = 9

इस समस्या को हल करने के लिए, हम Z-एल्गोरिदम (Z-algorithm) का उपयोग करेंगे और Z-सरणी की गणना करेंगे। Z-सरणी स्ट्रिंग की लंबाई के बराबर लंबाई की एक सरणी है। प्रत्येक तत्व str का एक उपसर्ग संग्रहीत करता है। नीचे दिया गया प्रोग्राम कार्यान्वयन दिखाता है,

कार्यक्रम उदाहरण

#include <bits/stdc++.h>
using namespace std;

void createZArray(string str, int n, int Zarray[]) {
    int L, R, k;
    L = R = 0;
    for (int i = 1; i < n; ++i) {
        if (i > R) {
            L = R = i;
            while (R < n && str[R - L] == str[R])
                R++;
            Zarray[i] = R - L;
            R--;
        }
        else {
            k = i - L;
            if (Zarray[k] < R - i + 1)
                Zarray[i] = Zarray[k];
            else {
                L = i;
                while (R < n && str[R - L] == str[R])
                    R++;
                Zarray[i] = R - L;
                R--;
            }
        }
    }
}

int calSumSimilarities(string s, int n) {
    int Zarray[n] = { 0 };
    createZArray(s, n, Zarray);
    int total = n;
    for (int i = 1; i < n; i++)
        total += Zarray[i];
    return total;
}

int main() {
    string s = "xyxyx";
    int n = s.length();
    cout << "स्ट्रिंग का अपने सभी प्रत्ययों के साथ समानता का योग " << calSumSimilarities(s, n);
    return 0;
}

आउटपुट

स्ट्रिंग का अपने सभी प्रत्ययों के साथ समानता का योग 9
  1. - C++ में दिए गए योग वाले सभी युग्म प्रिंट करें

    इस समस्या में, हमें पूर्णांकों की एक सरणी और एक पूर्णांक योग दिया गया है और हमें उन सभी पूर्णांक युग्मों को प्रिंट करना है जिनका योग योग मान के बराबर है। समस्या को समझने के लिए एक उदाहरण लेते हैं : इनपुट - सरणी = {1, 6, -2, 3} योग = 4 आउटपुट - (1, 3) , (6, -2) यहां, हमें दिए गए योग मान वाले युग्म चा

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

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

  1. - C++ में वर्णों की पुनरावृत्ति के साथ सभी क्रमपरिवर्तन प्रिंट करें

    इस समस्या में, हमें n वर्णों की एक स्ट्रिंग दी गई है और हमें स्ट्रिंग के वर्णों के सभी क्रमपरिवर्तन प्रिंट करने हैं। स्ट्रिंग के वर्णों को दोहराने की अनुमति है। क्रमपरिवर्तन की प्रिंटिंग वर्णमाला क्रम में (लेक्सिकोग्राफिकली क्रमबद्ध क्रम) में की जानी चाहिए। विषय को बेहतर ढंग से समझने के लिए एक उदाहर