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

C++ में Permutation in String


मान लीजिए हमारे पास दो स्ट्रिंग्स s1 और s2 हैं, हमें एक फ़ंक्शन लिखना है जो true लौटाए यदि s2 में s1 का क्रमचय (permutation) है। तो हम कह सकते हैं कि पहली स्ट्रिंग के क्रमचयों में से एक दूसरी स्ट्रिंग का उपस्ट्रिंग (substring) है। इसलिए यदि स्ट्रिंग s1 = "abc" है, और दूसरी स्ट्रिंग s2 "findcab" है, तो परिणाम true होगा, क्योंकि "abc" का क्रमचय सत्य है। वह "cab" है।

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

  • आकार 26 के दो वेक्टर cnt1 और cnt2 बनाएं
  • i को 0 से s1 तक की रेंज में
    • cnt1[s1[i] - 'a'] के मान को 1 से बढ़ाएं
  • j := 0 और required := s1 का आकार
  • i को 0 से s2 के आकार तक की रेंज में
    • x := s2[i]
    • cnt2[x - 'a'] को 1 से बढ़ाएं
    • यदि cnt1[x - 'a'] और cnt2[x - 'a'] <= cnt[x - 'a'], तो
      • required को 1 से घटाएं
    • जब तक j <= i और cnt2[s2[j] - 'a'] - 1 >= cnt1[s2[j] - 'a'], करें
      • cnt2[s2[j] - 'a'] को 1 से घटाएं
      • j को 1 से बढ़ाएं
    • यदि i - j + 1 = s1 का आकार और required = 0, तो true लौटाएं
  • false लौटाएं।

उदाहरण (C++)

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

#include <bits/stdc++.h> using namespace std; class Solution { public:    bool checkInclusion(string s1, string s2) {       vector <int> cnt1(26), cnt2(26);       for(int i = 0; i < s1.size(); i++)cnt1[s1[i] - 'a']++;       int j = 0;       int required = s1.size();       for(int i = 0; i < s2.size(); i++){          char x = s2[i];          cnt2[x - 'a']++;          if(cnt1[x - 'a'] && cnt2[x - 'a'] <= cnt1[x - 'a']) required--;          while(j <= i && cnt2[s2[j] - 'a'] - 1 >= cnt1[s2[j] - 'a']){             cnt2[s2[j] - 'a']--;             j++;          }          if(i - j + 1 == s1.size() && required == 0){             return true;          }       }       return false;    } }; main(){    Solution ob;    cout << (ob.checkInclusion("abc", "findcab")); }

इनपुट

"abc" "findcab"

आउटपुट

1

  1. - C++ में String at() फंक्शन

    सारांश यह संक्षिप्त ट्यूटोरियल स्ट्रिंग से कैरेक्टर्स के अनुक्रम को एक्सेस करने के लिए C++ स्ट्रिंग क्लास at() फंक्शनैलिटी का अवलोकन है। आगामी सेक्शन में, एक इच्छुक पाठक स्ट्रिंग क्लास प्रोग्रामिंग उदाहरणों के माध्यम से at() फंक्शन्स के मैनिपुलेशन की पूरी समझ प्राप्त कर सकता है। स्ट्रिंग क्लास प्रोग

  1. - C++ में स्ट्रिंग को टोकनाइज़ करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकनाइज़ किया जाए। C में हम कैरेक्टर सरणी के लिए strtok() फंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से किसी डिलीमीटर का उपयोग करके स्ट्रिंग को कैसे काटा जाए। C++ सुविधा का उपयोग करने के लिए, हम

  1. - C++ में स्ट्रिंग को टोकनाइज़ कैसे करें?

    पहला तरीका शब्दों को स्पेस से अलग करके पढ़ने के लिए stringstream का उपयोग करना है। यह थोड़ा सीमित है लेकिन अगर आप उचित चेक प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; int main() {