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

C++ में आइसोमोर्फिक स्ट्रिंग्स


समस्या विवरण

मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं; हमें जांचना है कि वे आइसोमोर्फिक हैं या नहीं। दो स्ट्रिंग्स को आइसोमोर्फिक कहा जाता है यदि s में वर्णों को बदलकर t प्राप्त किया जा सकता है।

एक वर्ण की सभी घटनाओं को दूसरे वर्ण से बदला जाना चाहिए जबकि वर्णों के क्रम को संरक्षित रखा जाए। कोई दो वर्ण एक ही वर्ण पर मैप नहीं हो सकते लेकिन एक वर्ण स्वयं पर मैप हो सकता है।

उदाहरण

यदि इनपुट है: s = "egg", t = "add", तो आउटपुट होगा true, क्योंकि e, a पर मैप हो सकता है, और g, d पर मैप हो सकता है।

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

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

  • आकार 256 की एक सरणी arr परिभाषित करें और -1 से भरें
  • आकार 256 की एक सरणी visited परिभाषित करें और 0 से भरें
  • आकार 256 की एक सरणी visited1 परिभाषित करें और 0 से भरें
  • i := 0 से आरंभ करें, जब i < s की लंबाई, i को 1 से बढ़ाते हुए:
    • यदि visited[s[i]] == 1 या visited1[t[i]] == 1:
      • यदि arr[s[i]] != t[i] - 'a' का ASCII:
        • false लौटाएं
    • अन्यथा:
      • visited[s[i]] := 1
      • visited1[t[i]] := 1
      • arr[s[i]] := t[i] - 'a' का ASCII
  • true लौटाएं

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

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

class Solution {
public:
    bool isIsomorphic(string s, string t) {
        vector<int> arr(256, -1);
        vector<bool> visited(256, 0);
        vector<bool> visited1(256, 0);
        for (int i = 0; i < s.length(); i++) {
            if (visited[s[i]] == 1 || visited1[t[i]] == 1) {
                if (arr[s[i]] != t[i] - 'a') {
                    return false;
                }
            } else {
                visited[s[i]] = 1;
                visited1[t[i]] = 1;
                arr[s[i]] = t[i] - 'a';
            }
        }
        return true;
    }
};

int main() {
    Solution ob;
    cout << (ob.isIsomorphic("sky","fry"));
    return 0;
}

इनपुट

"sky","fry"

आउटपुट

1
  1. - C++ प्रोग्राम: स्ट्रिंग्स को उल्टे क्रम में जोड़ें

    मान लीजिए हमारे पास दो स्ट्रिंग्स S और T हैं। दोनों लोअरकेस अक्षरों में हैं। अंतिम स्ट्रिंग उत्पन्न करने के लिए इस क्रम में T और S को जोड़ें। उदाहरण के लिए, यदि इनपुट S = ramming; T = prog है, तो आउटपुट programming होगा। चरण इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे: res := T concatena

  1. - C++ में दो स्ट्रिंग्स का सबसे बड़ा मर्ज

    मान लीजिए हमारे पास दो स्ट्रिंग्स a और b और एक स्ट्रिंग merge है। कार्य स्ट्रिंग merge को a और b के कैरेक्टर्स से इस तरह भरना है कि, यदि स्ट्रिंग a नॉन-खाली है, तो स्ट्रिंग a से पहला कैरेक्टर हटाएं और इसे स्ट्रिंग merge में कॉपी करें। यदि स्ट्रिंग b नॉन-खाली है, तो स्ट्रिंग b से पहला कैरेक्टर हटाएं

  1. C++ में जांचें कि ट्री आइसोमॉर्फिक है या नहीं C++ में जांचें कि ट्री आइसोमॉर्फिक है या नहीं

    बाइनरी ट्री में, प्रत्येक नोड में दो बच्चे होते हैं, यानी बायां बच्चा और दायां बच्चा। मान लीजिए हमारे पास दो बाइनरी ट्री हैं और कार्य यह जांचना है कि क्या एक ट्री को दूसरे ट्री को उसके बाएं तरफ फ्लिप करके प्राप्त किया जा सकता है या नहीं। एक ट्री आइसोमॉर्फिक है यदि इसे दूसरे ट्री को उसकी बाईं तरफ फ्ल