আমাদেরকে 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