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

C++ में दोहराए गए उपस्ट्रिंग पैटर्न (Repeated Substring Pattern)


मान लीजिए हमारे पास एक गैर-खाली स्ट्रिंग है। हमें जांचना है कि क्या इसे इसके एक उपस्ट्रिंग को लेकर और उपस्ट्रिंग को कई बार जोड़कर बनाया जा सकता है। स्ट्रिंग में केवल लोअरकेस अंग्रेजी अक्षर होते हैं और इसकी लंबाई 10000 से अधिक नहीं होगी। इसलिए यदि इनपुट "abaabaaba" जैसा है, तो उत्तर true होगा, क्योंकि यह "aba" का उपयोग करके बनाया गया है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • हम डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे।
  • आकार n की एक सरणी DP परिभाषित करें। n स्ट्रिंग का आकार है
  • i := 1 और j := 0
  • जब तक i < n
    • यदि str[i] == str[j], तो DP[i] := j + 1, i और j को 1 से बढ़ाएं
    • अन्यथा
      • यदि j > 0, तो j := DP[j - 1]
      • अन्यथा dp[i] := 0, और i को 1 से बढ़ाएं
  • यदि DP[n - 1] 0 नहीं है और n % (n - DP[n - 1]) == 0
    • true वापस करें
  • अन्यथा false वापस करें

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h> using namespace std; class Solution {    public:    void printVector(vector <int> v){       for(int i = 0; i < v.size(); i++)cout << v[i] << " ";       cout << endl;    }    bool repeatedSubstringPattern(string s) {       int n = s.size();       vector <int> dp(n);       int i = 1;       int j = 0;       while(i < n){          if(s[i] == s[j]){             dp[i] = j+1;             i++;             j++;          } else {             if(j > 0){                j = dp[j-1];             } else {                dp[i] = 0;                i++;             }          }       }       return dp[n - 1] && n % (n - dp[n-1]) == 0;    } }; main(){    Solution ob;    string res = (ob.repeatedSubstringPattern("abaabaaba"))? "true" : "fasle";    cout << res; }

इनपुट

"abaabaaba"

आउटपुट

true

  1. C++ में कम्पोजिट डिज़ाइन पैटर्न C++ में कम्पोजिट डिज़ाइन पैटर्न

    कम्पोजिट पैटर्न का उपयोग वहां किया जाता है जहां हमें ऑब्जेक्ट्स के एक समूह को एक सिंगल ऑब्जेक्ट के समान तरीके से ट्रीट करने की आवश्यकता होती है। कम्पोजिट पैटर्न ऑब्जेक्ट्स को ट्री स्ट्रक्चर के रूप में कंपोज करता है ताकि पार्ट और होल हायरार्की दोनों को दर्शाया जा सके। इस प्रकार का डिज़ाइन पैटर्न स्ट्

  1. - C++ में सबस्ट्रिंग

    सबस्ट्रिंग एक स्ट्रिंग का हिस्सा है। C++ में सबस्ट्रिंग प्राप्त करने के लिए एक फ़ंक्शन substr() है। इस फ़ंक्शन में दो पैरामीटर्स होते हैं: pos और len। pos पैरामीटर सबस्ट्रिंग की शुरुआती पोजीशन निर्दिष्ट करता है और len सबस्ट्रिंग में कैरेक्टर्स की संख्या दर्शाता है। उदाहरण #include <iostream>

  1. - C++ सिंगलटन डिज़ाइन पैटर्न समझाया गया

    सिंगलटन डिज़ाइन पैटर्न एक सॉफ्टवेयर डिज़ाइन सिद्धांत है जिसका उपयोग क्लास के इंस्टेंटिएशन को एक ऑब्जेक्ट तक सीमित करने के लिए किया जाता है। यह तब उपयोगी होता है जब सिस्टम भर में कार्यों को समन्वयित करने के लिए ठीक एक ऑब्जेक्ट की आवश्यकता होती है। उदाहरण के लिए, यदि आप एक लॉगर का उपयोग कर रहे हैं जो