কম্পিউটার

C++ এ একটি স্ট্রিং-এ একটি “1(0+)1” প্যাটার্নের ঘটনার সংখ্যা


আমাদেরকে 0s,1s এবং অন্যান্য বর্ণমালা সম্বলিত একটি স্ট্রিং দেওয়া হয়েছে। এটিতে "1(0+)1" ফর্মের প্যাটার্নও রয়েছে যেখানে 0+ মানে পরপর 0 এর যেকোনো সংখ্যা (>0)। লক্ষ্য হল স্ট্রিং স্ট্রিং এর ভিতরে এই ধরনের প্যাটার্ন ( “1(0+)1” ) খুঁজে বের করা।

আসুন উদাহরণ দিয়ে বুঝতে পারি

ইনপুট − str =“abb010bb10111011”

আউটপুট − একটি স্ট্রিং এ “1(0+)1” প্যাটার্নের সংঘটনের সংখ্যা হল − 2

ব্যাখ্যা − str এর ভিতরের প্যাটার্নগুলি হাইলাইট করা হয়েছে:“abb010bb10111011”, “abb010bb10111011”

ইনপুট − str =“01001011001001100”

আউটপুট − একটি স্ট্রিং-এ “1(0+)1” প্যাটার্নের সংঘটনের সংখ্যা হল −4

ব্যাখ্যা − str এর ভিতরের প্যাটার্নগুলি হাইলাইট করা হয়েছে:“01001011001001100”, “01001011001001100”, “01001011001001100”, “01001011001001100”

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

এটি দেখা যায় যে সমস্ত প্যাটার্ন 1 দিয়ে শুরু এবং শেষ হয়। আমরা একটি ফ্ল্যাগ ভেরিয়েবল চেক=1 ব্যবহার করে প্রথম 1টিকে চিহ্নিত করব এবং সমস্ত 0s এড়িয়ে যাবো।

অন্য কোন অক্ষরের জন্য (0 বা 1 নয়) 0 হিসাবে চেক সেট করুন।

যদি আমরা আরেকটি 1 খুঁজে পাই এবং ফ্ল্যাগ চেক 1 হয় তাহলে দেখুন পূর্ববর্তী মানটি 0 হয় কিনা। যদি হ্যাঁ হয় তবে পূর্ববর্তী 0 হিসাবে বৃদ্ধির সংখ্যা দুটির মধ্যে রয়েছে। যেকোনো নন 0 বা 1 সেটের জন্য আবার 0 হিসেবে চেক করুন।

  • স্ট্রিং হিসাবে ইনপুট স্ট্রিং নিন।

  • ফাংশন Pattern_occurrences(string str, int length) স্ট্রিং এবং এর দৈর্ঘ্য নেয় এবং একটি স্ট্রিং-এ একটি "1(0+)1" প্যাটার্নের সংঘটনের গণনা প্রদান করে

  • 0 হিসাবে প্রাথমিক গণনা নিন।

  • প্রাথমিকভাবে ফ্ল্যাগ ভেরিয়েবল চেক 0 হিসাবে নিন।

  • ইনডেক্স i=0 থেকে i পর্যন্ত লুপের জন্য ব্যবহার করে ট্রাভার্স str

  • যদি বর্তমান অক্ষর str[i] হয় 1 এবং চেক 0 হয় তাহলে চেক 1 হিসাবে সেট করুন এবং চালিয়ে যান।

  • যদি বর্তমান অক্ষর str[i] 1 হয় এবং চেক 1 হয়। তারপর এটি দ্বিতীয় 1। পূর্ববর্তী মান str[i-1] 0 কিনা তা পরীক্ষা করুন। যদি হ্যাঁ হয় তবে প্যাটার্ন পাওয়া যায়। সংখ্যা বৃদ্ধি।

  • যদি বর্তমান অক্ষরটি 0 বা 1 না হয় তবে এটি কখনই প্যাটার্নের অংশ হবে না। 0 হিসাবে চেক সেট করুন। এখন পরবর্তী সম্মুখীন 1 পরবর্তী প্যাটার্নের শুরু হিসাবে বিবেচিত হবে (যদি বিদ্যমান থাকে)।

  • শেষে গণনায় str.

    -এর ভিতরে এরকম বেশ কিছু প্যাটার্ন থাকবে
  • ফলাফল হিসাবে রিটার্ন গণনা।

উদাহরণ

#include<iostream>
using namespace std;
int Pattern_occurrences(string str, int length){
   int count = 0;
   bool check = 0;
   for (int i = 0; i < length ; i++){
      if (str[i] == '1' && check == 1){
         if (str[i - 1] == '0'){
            count++;
         }
      }
      if (str[i] == '1' && check == 0){
         check = 1;
         continue;
      }
      if (str[i] != '0' && str[i] != '1'){
         check = 0;
      }
   }
   return count;
}
int main(){
   string str = "01010111011";
   int length = str.length();
   cout<<"Count of occurrences of a “1(0+)1” pattern in a string are: "<< Pattern_occurrences(str, length);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −

উৎপন্ন করবে
Count of occurrences of a “1(0+)1” pattern in a string are: 3

  1. একটি স্ট্রিং (পুনরাবৃত্ত) C++ বিপরীত করুন

  2. একটি বাইনারি স্ট্রিং C++ এ সর্বত্র একটির পরপর দুটি ঘটনা আছে কিনা তা পরীক্ষা করুন

  3. স্ট্রিং-এ একটি শব্দের উপস্থিতি গণনা করার জন্য C# প্রোগ্রাম

  4. পাইথনে স্ট্রিং-এ একটি অক্ষরের ঘটনা গণনা করুন