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

सी++ में वर्ड पैटर्न II


मान लीजिए कि हमारे पास एक पैटर्न और एक स्ट्रिंग है जिसे str कहा जाता है, हमें यह जांचना होगा कि str उसी पैटर्न का अनुसरण करता है या नहीं। यहां पैटर्न फॉलो का अर्थ है एक पूर्ण मिलान, जैसे कि पैटर्न में एक अक्षर और str में एक गैर-रिक्त सबस्ट्रिंग के बीच एक आक्षेप है।

इसलिए, यदि इनपुट पैटर्न की तरह है "abaa", str "ऑरेंजग्रीनोरेंजोरेंज" है, तो आउटपुट सही होगा

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

  • एक फ़ंक्शन हल करें () को परिभाषित करें, यह i, j, ptr, s, एक मैप m, एक सेट जिसे यूज्ड कहा जाता है,

    लेगा
  • यदि i>=s का आकार और j>=ptr का आकार, तो −

    • सही लौटें

  • यदि i>=s का आकार या j>=ptr का आकार, तो −

    • झूठी वापसी

  • अगर ptr[j] m में है, तो -

    • अनुरोध :=एम[ptr[j]]

    • लेन:=अनुरोध का आकार

    • यदि लेन> s का आकार है, तो −

      • झूठी वापसी

    • यदि अनुक्रमणिका (i से len-1) में s का प्रतिस्थापन req और हल (i + len, j + 1, ptr, s, m, प्रयुक्त) के समान है, तो -

      • सही लौटें

    • झूठी वापसी

  • अन्यथा

    • एक्स:=पीटीआर [जे]

    • प्रारंभ करने के लिए k :=i, जब k

      • अस्थायी:=सूचकांक से s का विकल्प (i से k - i)

      • यदि अस्थायी का उपयोग किया जाता है, तो -

        • निम्नलिखित भाग पर ध्यान न दें, अगले पुनरावृत्ति पर जाएं

      • एम [एक्स]:=अस्थायी

      • उपयोग में अस्थायी डालें

      • यदि हल करें (k + 1, j + 1, ptr, s, m, प्रयुक्त), तो -

        • सही लौटें

      • m से x हटाएं

      • उपयोग किए गए से अस्थायी हटाएं

  • झूठी वापसी

  • मुख्य विधि से निम्न कार्य करें -

  • एक नक्शा परिभाषित करें मी

  • इस्तेमाल किए गए एक सेट को परिभाषित करें

  • वापसी हल (0, 0, पीटीआर, एस, एम, प्रयुक्त)

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool solve(int i, int j, string ptr, string s, map <char, string>& m, set<string>& used){
      if (i >= s.size() && j >= ptr.size()) {
         return true;
      }
      if (i >= s.size() || j >= ptr.size())
         return false;
      if (m.count(ptr[j])) {
         string req = m[ptr[j]];
         int len = req.size();
         if (len > s.size() - i)
            return false;
         if ((s.substr(i, len) == req) && solve(i + len, j + 1, ptr, s, m, used))
            return true;
         return false;
      }
      else {
         char x = ptr[j];
         for (int k = i; k < s.size(); k++) {
            string temp = s.substr(i, k - i + 1);
            ;
            if (used.count(temp))
               continue;
            m[x] = temp;
            used.insert(temp);
            if (solve(k + 1, j + 1, ptr, s, m, used))
               return true;
            m.erase(x);
            used.erase(temp);
         }
      }
      return false;
   }
   bool wordPatternMatch(string ptr, string s) {
      map<char, string> m;
      set<string> used;
      return solve(0, 0, ptr, s, m, used);
   }
};
main(){
   Solution ob;
   cout << (ob.wordPatternMatch("abaa", "orangegreenorangeorange"));
}

इनपुट

"abaa" "orangegreenorangeorange"

आउटपुट

1

  1. सी++ में बीके ट्री परिचय

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

  1. C++ . में समग्र डिजाइन पैटर्न

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

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

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