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

पायथन में टी में एक स्ट्रिंग एस के सभी विपर्यय के प्रारंभ सूचकांकों को खोजने के लिए कार्यक्रम

मान लीजिए कि हमारे पास दो तार S और T हैं, हमें T में S के विपर्यय के सभी प्रारंभिक सूचकांकों को खोजना है। स्ट्रिंग्स में केवल लोअरकेस अक्षर होते हैं और दोनों स्ट्रिंग्स S और T की लंबाई 20 और 100 से बड़ी नहीं होगी।

इसलिए, यदि इनपुट S ="cab" T ="bcabxabc" जैसा है, तो आउटपुट "bca", "cab" और "abc" सबस्ट्रिंग के रूप में [0, 1, 5, ] होगा।

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

  • मानचित्र को परिभाषित करें m, n:=s का आकार, बाएँ सेट करें:=0, दाएँ:=0, काउंटर:=p का आकार

  • एक सरणी को परिभाषित करें ans

  • p में वर्णों की आवृत्ति को मानचित्र m में संग्रहीत करें

  • दाईं ओर :=0 से n - 1

    • यदि m में s[right] है और m[s[right]] शून्य नहीं है, तो m[s[right]] को 1 से घटाएं, काउंटर को 1 से घटाएं और यदि काउंटर =0 है, तो बाएं को उत्तर में डालें

    • अन्यथा

      • जबकि बाएं <दाएं,

        • यदि s[बाएं] m में मौजूद नहीं है, तो काउंटर को 1 से बढ़ाएं और m[s[बाएं]] को 1 से बढ़ाएं

        • बाईं ओर 1

          . बढ़ाएं
        • अगर m में s[right] है और m[s[right]] शून्य नहीं है, तो 1 से दाएं घटाएं और लूप से बाहर आएं

      • अगर m में कोई s[बाएं] नहीं है, तो बाएं सेट करें:=दायां + 1

  • वापसी उत्तर

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<int> findAnagrams(string s, string p) {
      map <char, int> m;
      int n = s.size();
      int left = 0, right = 0;
      int counter = p.size();
      vector <int> ans;
      for(int i = 0; i < p.size(); i++) m[p[i]]++;
      for(int right = 0; right < n; right++){
         if(m.find(s[right]) != m.end() && m[s[right]]){
            m[s[right]]--;
            counter--;
            if(counter == 0)ans.push_back(left);
         } else {
            while(left<right){
               if(m.find(s[left]) != m.end()) {
                  counter++;
                  m[s[left]]++;
               }
               left++;
               if(m.find(s[right]) != m.end() && m[s[right]]){
                  right--;
                  break;
               }
            }
            if(m.find(s[left])==m.end())left = right + 1;
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   print_vector(ob.findAnagrams("bcabxabc", "cab")) ;
}

इनपुट

"bcabxabc", "cab"

आउटपुट

[0, 1, 5, ]

  1. पायथन में दिए गए सूचकांकों के साथ स्ट्रिंग को फेरबदल करने का कार्यक्रम

    मान लीजिए कि हमारे पास एक स्ट्रिंग s और सूचकांकों की एक सूची है, वे समान लंबाई के हैं। स्ट्रिंग s को इस तरह से फेरबदल किया जाएगा कि स्थिति i पर वर्ण, अंतिम स्ट्रिंग में सूचकांकों [i] पर चला जाता है। हमें अंतिम स्ट्रिंग ढूंढनी है। इसलिए, यदि इनपुट s =ktoalak ind =[0,5,1,6,2,4,3] जैसा है, तो आउटपुट क

  1. किसी दिए गए स्ट्रिंग के सभी क्रमपरिवर्तन मुद्रित करने के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक स्ट्रिंग दी गई है जिसकी हमें स्ट्रिंग के सभी संभावित क्रमपरिवर्तन प्रदर्शित करने की आवश्यकता है। आइए अब नीचे दिए गए कार्यान्वयन में समाधान देखें - उदाहरण # conversion def toString(List):    return &

  1. एक स्ट्रिंग में दर्पण वर्ण खोजने के लिए पायथन प्रोग्राम

    उपयोगकर्ता इनपुट स्ट्रिंग और उस स्थिति से स्थिति को देखते हुए हमें वर्णों को वर्णानुक्रम में स्ट्रिंग की लंबाई तक दर्पण करने की आवश्यकता है। इस ऑपरेशन में, हम a को z, b से y, c से x, d से w में बदलते हैं और इसी तरह से पहला कैरेक्टर आखिरी हो जाता है और इसी तरह चालू। Inpu t: p = 3 Input string = p