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

उन उपस्ट्रिंग्स की गणना जिनमें {a,b,c} तीनों एक साथ न हों - C++

समस्या विवरण

हमें केवल 'a', 'b', 'c' वाली एक स्ट्रिंग दी गई है। लक्ष्य उन उपस्ट्रिंग्स की गणना करना है जिनमें ये तीनों वर्ण एक साथ न हों।

उदाहरण

इनपुट: str = "aabc"

आउटपुट: 8

व्याख्या: वैध: "a", "a", "b", "c", "aa", "ab", "bc", "aab"

इनपुट: str = "abcabc"

आउटपुट: 11

दृष्टिकोण

कुल उपस्ट्रिंग्स = n*(n+1)/2। प्रत्येक वर्ण 'a', 'b', 'c' के अंतिम इंडेक्स को ट्रैक करें। जब कोई वर्ण मिले, तो अन्य दो वर्णों के न्यूनतम इंडेक्स को कुल से घटाएँ (क्योंकि वे उपस्ट्रिंग्स अब तीनों वर्ण रखते हैं)।

एल्गोरिदम

  1. प्रारंभिक count = n*(n+1)/2
  2. a = b = c = 0 (अंतिम इंडेक्स, 1-आधारित)
  3. प्रत्येक इंडेक्स i के लिए:
    • यदि str[i] == 'a': a = i+1; count -= min(b, c)
    • यदि str[i] == 'b': b = i+1; count -= min(a, c)
    • यदि str[i] == 'c': c = i+1; count -= min(a, b)
  4. count लौटाएँ

C++ कार्यान्वयन

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

int sub_without_all(char str[], int size) {
    int count = size * (size + 1) / 2;
    int a = 0, b = 0, c = 0;
    
    for (int i = 0; i < size; i++) {
        if (str[i] == 'a') {
            a = i + 1;
            count -= min(b, c);
        } else if (str[i] == 'b') {
            b = i + 1;
            count -= min(a, c);
        } else {
            c = i + 1;
            count -= min(a, b);
        }
    }
    return count;
}

int main() {
    char str[] = "abcabbc";
    int size = strlen(str);
    cout << "Count: " << sub_without_all(str, size);
    return 0;
}

आउटपुट

Count: 15
  1. - C++ में n कैरेक्टर्स के सेट से लंबाई k की सभी संभावित स्ट्रिंग्स प्रिंट करना

    इस समस्या में, हमें कैरेक्टर्स का एक सेट और एक धनात्मक पूर्णांक k दिया गया है और हमें उन सभी संभावित स्ट्रिंग्स को प्रिंट करना है जिनकी लंबाई k है और जो सेट के कैरेक्टर्स का उपयोग करके उत्पन्न की जा सकती हैं।आइए समस्या को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं −Input: set = {‘x&rsq

  1. - C++ में स्ट्रिंग के सभी कैरेक्टर्स को टॉगल करना

    यह प्रोग्राम स्ट्रिंग के कैरेक्टर्स को अपरकेस में बदलता है। हालांकि, इस कार्य को C++ क्लास लाइब्रेरी के toUpper() मेथड का उपयोग करके आसानी से प्राप्त किया जा सकता है। लेकिन इस प्रोग्राम में, हम अपरकेस में कैरेक्टर्स के ASCII वैल्यू की गणना करके ऐसा करते हैं। एल्गोरिदम निम्नलिखित है: एल्गोरिदम शुरुआत

  1. - C++ प्रोग्राम: जांचें कि क्या दिए गए निर्भरताओं से सभी कार्यों को पूरा करना संभव है

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए पूर्वापेक्षाओं के आधार पर सभी दिए गए कार्यों को पूरा करना संभव है या नहीं जांचता है। उदाहरण के लिए, मान लीजिए हमें तीन कार्य दिए गए हैं और पूर्वापेक्षाएं [[1, 0], [2, 1], [3, 2]] हैं। ([1,0] का अर्थ है कि 1 कार्य लेने के लिए; 0 कार्य पहले पूरा क