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

C++ में दिए गए शब्दों के पैटर्न को फॉलो करने की जांच करने का प्रोग्राम

समस्या विवरण

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

उदाहरण के लिए, यदि इनपुट है pattern = "cbbc", str = "word pattern pattern word", तो आउटपुट True होगा।

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

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

  1. strcin := str
  2. एक ऐरे words परिभाषित करें
  3. strcin में प्रत्येक शब्द के लिए: शब्द को words के अंत में डालें
  4. एक मैप p2i परिभाषित करें
  5. i := 0
  6. pat := खाली स्ट्रिंग
  7. pattern में प्रत्येक c के लिए:
    • यदि c, p2i का सदस्य नहीं है:
      • i बढ़ाएं
      • p2i[c] := i
    • pat := pat + p2i[c]
  8. एक मैप str2i परिभाषित करें
  9. i := 0
  10. pat1 := खाली स्ट्रिंग
  11. words में प्रत्येक c के लिए:
    • यदि c, str2i का सदस्य नहीं है:
      • i बढ़ाएं
      • str2i[c] := i
    • pat1 := pat1 + str2i[c]
  12. यदि pat1, pat के समान है तो true वापस करें

उदाहरण

#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"));
}

इनपुट

"cbbc", "word pattern pattern word"

आउटपुट

1
  1. C++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं C++ में जांचें कि बाइनरी ट्री ऊंचाई-संतुलित है या नहीं

    एक बाइनरी ट्री ऊंचाई-संतुलित (height-balanced) होता है यदि प्रत्येक नोड के लिए उसके बाएं और दाएं सबट्री की ऊंचाई का निरपेक्ष अंतर 0 या 1 हो। दिए गए ट्री के लिए आउटपुट true (1) है। समाधान दृष्टिकोण (पोस्ट-ऑर्डर DFS) एक ग्लोबल फ्लैग ret = true रखें। dfs(node) फंक्शन नोड की ऊंचाई वापस करता है: यदि न

  1. C++ प्रोग्राम: 3-D तल में बिंदुओं का समतलीय होना जांचना C++ प्रोग्राम: 3-D तल में बिंदुओं का समतलीय होना जांचना

    बिंदु (x1, y1, z1), (x2, y2, z2), (x3, y3, z3) और (x4, y4, z4) दिए गए हैं और प्रोग्राम को जांचना होगा कि दिए गए बिंदु समतलीय (coplanar) हैं या नहीं। बिंदुओं को समतलीय कहा जाता है यदि वे एक ही तल के अंतर्गत आते हैं और यदि वे अलग-अलग तलों के अंतर्गत आते हैं तो बिंदु समतलीय नहीं हैं। नीचे एक छवि दी गई

  1. C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं C++ प्रोग्राम: जांचें कि क्या एक ग्राफ दृढ़ता से जुड़ा हुआ है या नहीं

    निर्देशित ग्राफ में घटकों को दृढ़ता से जुड़ा हुआ कहा जाता है, जब एक घटक में वर्टेक्स के प्रत्येक जोड़े के बीच एक पथ होता है। इस एल्गोरिदम को हल करने के लिए, पहले, प्रत्येक वर्टेक्स का फिनिश टाइम प्राप्त करने के लिए DFS एल्गोरिदम का उपयोग किया जाता है, अब ट्रांसपोज़्ड ग्राफ का फिनिश टाइम ढूंढें, फि