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

C++ में वर्ड पैटर्न


समस्या विवरण

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

उदाहरण

यदि इनपुट है: pattern = "cbbc", str = "word pattern pattern word", तो आउटपुट होगा True।

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • strcin := str
  • शब्दों की एक सरणी परिभाषित करें
  • strcin में प्रत्येक शब्द के लिए:
    • शब्द को शब्दों के अंत में डालें
  • p2i नामक एक मैप परिभाषित करें
  • i := 0
  • pat := खाली स्ट्रिंग
  • pattern में प्रत्येक c के लिए:
    • यदि c, p2i का सदस्य नहीं है:
      • i को 1 से बढ़ाएं
      • p2i[c] := i
    • pat := pat + p2i[c]
  • str2i नामक एक मैप परिभाषित करें
  • i := 0
  • pat1 := खाली स्ट्रिंग
  • words में प्रत्येक c के लिए:
    • यदि c, str2i का सदस्य नहीं है:
      • i को 1 से बढ़ाएं
      • str2i[c] := i
    • pat1 := pat1 + str2i[c]
  • pat1, pat के समान होने पर true लौटाएं

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

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

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        istringstream strcin(str);
        string word;
        vector<string> words;
        while (strcin >> word)
            words.push_back(word);
        unordered_map<char, int> p2i;
        int i = 0;
        string pat = "";
        for (auto c : pattern) {
            if (p2i.count(c) == 0) {
                i++;
                p2i[c] = i;
            }
            pat += to_string(p2i[c]);
        }
        unordered_map<string, int> str2i;
        i = 0;
        string pat1 = "";
        for (auto c : words) {
            if (str2i.count(c) == 0) {
                i++;
                str2i[c] = i;
            }
            pat1 += to_string(str2i[c]);
        }
        return pat1 == pat;
    }
};

int main() {
    Solution ob;
    cout << (ob.wordPattern("cbbc", "word pattern pattern word"));
    return 0;
}

इनपुट

"cbbc", "word pattern pattern word"

आउटपुट

1
  1. C++ में BK ट्री परिचय C++ में BK ट्री परिचय

    BK ट्री या बर्कहार्ड ट्री (Burkhard tree) एक प्रकार की डेटा संरचना है जिसका उपयोग आमतौर पर लेवेंश्टाइन दूरी (Levenshtein distance) के आधार पर स्पेल चेक करने के लिए किया जाता है। इसका उपयोग स्ट्रिंग मिलान के लिए ऑटोकरेक्ट फीचर बनाने के लिए भी किया जाता है। मान लें कि हमारे पास एक डिक्शनरी में कुछ शब

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

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

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

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