আমাদের একটি স্ট্রিং str দেওয়া আছে যেটিতে ০, ১ এবং অন্যান্য অক্ষর রয়েছে। এটিতেও "1(0+)1" রূপের প্যাটার্ন রয়েছে যেখানে 0+ মানে এক বা একাধিক (>0) সন্নিহিত ০। লক্ষ্য হল স্ট্রিং str-এর ভেতরে এτοι প্যাটার্ন ("1(0+)1") খুঁজে বের করা।
ইনপুট: str = "abb010bb10111011"
আউটপুট: স্ট্রিং-এ "1(0+)1" প্যাটার্নের ঘটনার গণনা: 2
ব্যাখ্যা: str-এ প্যাটার্নগুলো হাইলাইট করা: "abb010bb10111011", "abb010bb10111011"
ইনপুট: str = "01001011001001100"
আউটপুট: স্ট্রিং-এ "1(0+)1" প্যাটার্নের ঘটনার গণনা: 4
ব্যাখ্যা: str-এ প্যাটার্নগুলো হাইলাইট করা: "01001011001001100", "01001011001001100", "01001011001001100", "01001011001001100"
দেখা যায় সকল প্যাটার্ন ১ দিয়ে শুরু ও ১ দিয়ে শেষ হয়। আমরা প্রথম ১-কে একটি ফ্ল্যাগ ভেরিয়েবল check=1 দিয়ে চিহ্নিত করব এবং সকল ০ কিপ করব।
অন্য যেকোনো ক্যারেক্টার (০ বা ১ ছাড়া) পেলে check কে ০ সেট করব।
যদি আমরা অন্য একটি ১ পাই এবং ফ্ল্যাগ check ১ থাকে, তবে দেখব আগের মান ০ কিনা। যদি হ্যাঁ, তবে count বাড়াব কারণ পূর্বের ০ দুটি ১-এর মাঝপথে আছে। অন্য যেকোনো নন-০ বা নন-১ ক্যারেক্টারের জন্য check আবার ০ সেট করব। এরপর আগামি ১কে পরবর্তী প্যাটার্নের শুরু হিসেবে বিবেচনা করব (যদি থাকে)।
- ইনপুট স্ট্রিং str নিন।
- Pattern_occurrences(string str, int length) ফাংশন স্ট্রিং এবং এর দৈর্ঘ্য নেয় এবং "1(0+)1" প্যাটার্নের ঘটনার গণনা ফেরত দেয়।
- আরম্ভিক গণনা ০ নিন।
- ফ্ল্যাগ ভেরিয়েবল check ০ হিসেবে আরম্ভিক করুন।
- for লুপ দিয়ে str ট্রভার্স করুন i=0 থেকে i
- যদি বর্তমান ক্যারেক্টার str[i] '1' হয় এবং check ০ হয়, তবে check কে ১ সেট করুন এবং continue করুন।
- যদি বর্তমান ক্যারেক্টার str[i] '1' হয় এবং check ১ হয়। তবে এটি দ্বিতীয় ১। চেক করুন আগের মান str[i-1] '0' কিনা। যদি হ্যাঁ, তবে প্যাটার্ন পাওয়া গেল। count বাড়ান।
- যদি বর্তমান ক্যারেক্টার ০ বা ১ না হয়, তবে এটি কখনো প্যাটার্নের অংশ হবেনা। check কে ০ সেট করুন। এখন পাওয়া যাবে ১ কে পরবর্তী প্যাটার্নের শুরু হিসেবে বিবেচনা করা হবে (যদি থাকে)।
- শেষে count-এ str-এ এমন প্যাটার্নের সংখ্যা থাকবে।
- ফলাফল হিসেবে count ফেরত দিন।
#includeusing 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