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

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


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

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

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

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

  • 256 आकार की सरणी को परिभाषित करें और -1 से भरें

  • 256 आकार की देखी गई सरणी को परिभाषित करें और 0 से भरें

  • 256 आकार के विज़िट किए गए 1 सरणी को परिभाषित करें और 0 से भरें

  • इनिशियलाइज़ i:=0 के लिए, जब i

    • यदि विज़िट किया गया [s[i]] 1 के समान है या विज़िट किया गया1[t[i]] 1 के समान है, तो -

      • अगर arr[s[i]] t[i] - 'a' के ASCII के बराबर नहीं है, तो -

        • झूठी वापसी

    • अन्यथा

      • विज़िट किया गया[s[i]] :=1

      • विज़िट किया गया1[t[i]]:=1

      • arr[s[i]] :=t[i] - 'a' का ASCII

  • सही लौटें

उदाहरण

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

#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;
   }
};
main(){
   Solution ob;
   cout << (ob.isIsomorphic("sky","fry"));
}

इनपुट

"sky","fry"

आउटपुट

1

  1. C++ प्रोग्राम स्ट्रिंग्स को उल्टे क्रम में संयोजित करने के लिए

    मान लीजिए कि हमारे पास दो तार S और T हैं। दोनों छोटे अक्षरों में हैं। अंतिम स्ट्रिंग उत्पन्न करने के लिए इस क्रम में टी और एस को संयोजित करें। तो, अगर इनपुट एस =रैमिंग जैसा है; टी =प्रोग, फिर आउटपुट प्रोग्रामिंग होगा कदम इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - res := T concatenate S retur

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

    मान लीजिए कि हमारे पास दो तार ए और बी और एक स्ट्रिंग मर्ज है। कार्य स्ट्रिंग मर्ज को ए और बी के वर्णों से इस तरह से भरना है कि, यदि स्ट्रिंग ए गैर-रिक्त है, तो स्ट्रिंग ए से पहले अक्षर को हटा दें और इसे स्ट्रिंग मर्ज में कॉपी करें। यदि स्ट्रिंग बी गैर-रिक्त है, तो स्ट्रिंग बी से पहले अक्षर को हटा द

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

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