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

C++ में स्ट्रिंग के अद्वितीय सबसीक्वेंसेस की संख्या गिनने का प्रोग्राम


परिचय

मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें s के गैर-खाली अद्वितीय सबसीक्वेंसेस (unique subsequences) की संख्या ढूंढनी है। यदि उत्तर बहुत बड़ा है तो परिणाम को 10^9 + 7 से मोड (mod) करें।

तो, यदि इनपुट s = "xxy" है, तो आउटपुट 5 होगा, क्योंकि पांच सबसीक्वेंसेस हैं: "x", "xx", "xy", "y" और "xxy"।

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

डायनामिक प्रोग्रामिंग का उपयोग करते हुए, हम प्रत्येक कैरेक्टर के लिए अंतिम घटना को ट्रैक करते हैं और डुप्लिकेट सबसीक्वेंसेस से बचने के लिए समायोजित करते हैं।

उदाहरण कोड

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

const int m = 1e9 + 7;

int solve(string s) {
    int n = s.size();
    vector<int> table(26);
    long long res = 0;
    for (int i = 1; i <= n; ++i) {
        int c = s[i - 1] - 'a';
        int curr = (res + 1 - table[c] + m) % m;
        res = (res + curr) % m;
        table[c] = (table[c] + curr) % m;
    }
    return res;
}

int main(){
    string s = "xxy";
    cout << solve(s);
    return 0;
}

इनपुट

"xxy"

आउटपुट

5

व्याख्या

"xxy" के अद्वितीय सबसीक्वेंसेस: "x" (पहला), "x" (दूसरा - लेकिन डुप्लिकेट), "xx", "xy", "xxy", "y"। अद्वितीय: "x", "xx", "xy", "xxy", "y" = 5।

निष्कर्ष

यह O(n) समय और O(1) स्पेस (26 आकार की टेबल) समाधान है। प्रत्येक कैरेक्टर के लिए नए सबसीक्वेंसेस की गणना करता है और डुप्लिकेट को घटाता है। यदि आपके कोई प्रश्न हैं, तो कमेंट सेक्शन में पूछें।


  1. - C++ प्रोग्राम: संख्या n को 1 बनाने के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या गिनें

    मान लीजिए हमारे पास एक संख्या n है। हम इनमें से कोई एक संक्रिया मनमाने ढंग से कई बार करते हैं: n को n/2 से बदलें जब n 2 से विभाज्य हो n को 2n/3 से बदलें जब n 3 से विभाज्य हो n को 4n/5 से बदलें जब n 5 से विभाज्य हो हमें संख्या 1 बनाने के लिए आवश्यक न्यूनतम चालों की संख्या गिननी है। यदि संभव नहीं ह

  1. - C++ प्रोग्राम: सीढ़ियों की संख्या और प्रत्येक सीढ़ी में चरणों की संख्या गिनें

    मान लीजिए हमारे पास n तत्वों वाला एक सरणी A है। मान लें, अमल एक बहुमंजिला इमारत के अंदर सीढ़ियां चढ़ता है। हर बार जब वह चढ़ता है, तो 1 से गिनती शुरू करता है। उदाहरण के लिए, यदि वह 3 चरणों और 4 चरणों वाली दो सीढ़ियां चढ़ता है, तो वह 1, 2, 3, 1, 2, 3, 4 जैसे संख्या बोलेगा। सरणी A में, संख्याएं अमल द्

  1. आकार d के डोडेकागन बनाने के तरीकों की संख्या गिनने के लिए C++ प्रोग्राम आकार d के डोडेकागन बनाने के तरीकों की संख्या गिनने के लिए C++ प्रोग्राम

    मान लीजिए हमारे पास एक संख्या d है। मान लें कि भुजा लंबाई 1 के अनंत वर्गाकार टाइल्स और नियमित त्रिकोणीय टाइल्स हैं। हमें उन तरीकों की संख्या ढूंढनी है जिनसे हम इन टाइल्स का उपयोग करके भुजा d के साथ नियमित डोडेकागन (12-भुज बहुभुज) बना सकते हैं। यदि उत्तर बहुत बड़ा है, तो परिणाम को 998244353 मॉड्यूलो