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

C++ में बार-बार सबस्ट्रिंग पैटर्न

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

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

  • हम गतिशील प्रोग्रामिंग दृष्टिकोण का उपयोग करेंगे।
  • आकार n के एक सरणी DP को परिभाषित करें। n स्ट्रिंग का आकार है
  • i :=1 और j :=0
  • जबकि मैं
  • अगर 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
    • सही लौटें
  • अन्यथा झूठी वापसी
  • उदाहरण

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

    #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++ . में समग्र डिजाइन पैटर्न

      समग्र पैटर्न का उपयोग किया जाता है जहां हमें वस्तुओं के समूह को एक ही वस्तु के समान व्यवहार करने की आवश्यकता होती है। समग्र पैटर्न भाग के साथ-साथ संपूर्ण पदानुक्रम का प्रतिनिधित्व करने के लिए एक वृक्ष संरचना की अवधि में वस्तुओं की रचना करता है। इस प्रकार का डिज़ाइन पैटर्न संरचनात्मक पैटर्न के अंतर्ग

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

      एक सबस्ट्रिंग एक स्ट्रिंग का एक भाग है। सी ++ में सबस्ट्रिंग प्राप्त करने के लिए एक फ़ंक्शन सबस्ट्र () है। इस फ़ंक्शन में दो पैरामीटर हैं:पॉज़ और लेन। पॉज़ पैरामीटर सबस्ट्रिंग की प्रारंभ स्थिति को निर्दिष्ट करता है और लेन एक सबस्ट्रिंग में वर्णों की संख्या को दर्शाता है। एक प्रोग्राम जो C++ में सबस

    1. C++ सिंगलटन डिजाइन पैटर्न को समझाइए।

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