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

एक स्ट्रिंग में सभी पदों तक पहुँचने के लिए सिग्नल के लिए लिया गया समय ज्ञात करें - C++

इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जो एक स्ट्रिंग में सभी पदों तक पहुंचने के लिए सिग्नल के लिए लगने वाले समय की गणना करता है। मैं इसे एक उदाहरण से समझाता हूं।

हमारे पास एक स्ट्रिंग होगी जिसमें केवल s . होगा और p पात्र। s एक संकेत है और p एक स्थिति है स्ट्रिंग में। एक संकेत s . पर प्रारंभ होता है और बाएँ और दाएँ दोनों दिशाओं में यात्रा करता है। हम मान रहे हैं कि स्ट्रिंग में अगली स्थिति की यात्रा करने में एक इकाई समय लगता है। हमारा काम सभी स्थितियों . को बदलने के लिए आवश्यक समय की गणना करना है सिग्नल . में ।

आइए कुछ उदाहरण देखें।

इनपुट - पीपीपीपीपीएसएस

आउटपुट -5

इनपुट - पीएसपीएसपीपीएस

आउटपुट - 1

इनपुट - ssssss

आउटपुट - 0

आइए देखें कि समस्या के समाधान में शामिल कदम क्या हैं।

  • एक स्ट्रिंग और एक समय शुरू करें (0)

  • स्ट्रिंग पर पुनरावृति करें।

    • सतत p . की गणना करें वर्ण और गिनती को एक चर में संग्रहीत करें।

    • यदि वर्तमान वर्ण s . है और p गिनती पिछली बार की तुलना में अधिक है, फिर जांचें कि क्या s बाईं ओर मौजूद है या नहीं।

    • अगर s दोनों पक्षों में मौजूद है, फिर गिनती को s . के रूप में दो हिस्सों में विभाजित करें दोनों दिशाओं में यात्रा कर सकते हैं।

    • p . की गिनती रीसेट करें ।

उदाहरण

आइए कोड देखें।

#include <bits/stdc++.h>
using namespace std;
int timeToConvertToSignalString(string sample_string, int string_len) {
   int p_count = 0, time = 0;
   for (int i = 0; i <= string_len; i++) {
      if (sample_string[i] == 'p') {
         p_count++;
      }
      else {
         if (p_count > time) {
            bool is_present_left_side = false;
            if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) {
               is_present_left_side = 1;
            }
            if (is_present_left_side) {
               p_count = ceil((double)p_count / 2);
            }
            time = max(time, p_count);
         }
         p_count = 0;
      }
   }
   return time;
}
int main() {
   string sample_string = "pppppspss";
   int n = sample_string.size();
   cout << timeToConvertToSignalString(sample_string, n) << endl;
   return 0;
}

आउटपुट

यदि आप उपरोक्त प्रोग्राम को निष्पादित करते हैं, तो आपको निम्न परिणाम प्राप्त होंगे।

5

प्रोग्राम को किसी भिन्न केस के साथ चलाने का प्रयास करें और इसे जांचें।

निष्कर्ष

यदि ट्यूटोरियल में आपके कोई प्रश्न हैं, तो उनका टिप्पणी अनुभाग में उल्लेख करें।


  1. C++ . में दिए गए स्ट्रिंग में "1(0+)1" के सभी पैटर्न खोजें

    मान लीजिए कि एक स्ट्रिंग में 1(0+)1 जैसे पैटर्न हैं। जहां (0+) 1s की गैर-रिक्त लगातार घटनाओं को इंगित करता है। हमें सभी पैटर्न खोजने होंगे। पैटर्न ओवरलैप कर सकते हैं। स्ट्रिंग जरूरी नहीं कि एक बाइनरी स्ट्रिंग हो। यह केवल अंक और लोअरकेस वर्ण धारण कर सकता है। मान लीजिए कि स्ट्रिंग 1101001 की तरह है, त

  1. सी ++ में एक शब्दकोश में विशिष्ट पैटर्न से मेल खाने वाले सभी तार खोजें

    विचार करें कि हमारे पास डिक्शनरी नामक स्ट्रिंग्स की एक सूची है। हमारे पास एक और पैटर्न स्ट्रिंग है। हमारा काम उन स्ट्रिंग्स को ढूंढना है जो पैटर्न से मेल खाती हैं। मान लीजिए कि शब्दकोश [abb, xyz, aab, kmm] जैसा है, और पैटर्न stt है, तो परिणाम abb, और kmm होंगे। चूंकि पैटर्न में पहले एक अक्षर होता है

  1. सी ++ प्रोग्राम अनुक्रमों के एक सेट में सभी अनुक्रमों के लिए सबसे लंबे समय तक सामान्य अनुक्रम खोजने के लिए

    यहां हम अनुक्रमों के एक सेट में सभी अनुक्रमों के लिए सबसे लंबे बाद के सामान्य को खोजने के लिए C++ प्रोग्राम पर चर्चा करेंगे। एल्गोरिदम Begin Take the array of strings as input. function matchedPrefixtill(): find the matched prefix between string s1 and s2 :    n1 = store length of string s