একটি স্ট্রিং-এ 1(0+)1 প্যাটার্ন থাকতে পারে। এখানে (0+) বোঝায় ০-এর নন-এম্পটি (non-empty) ক্রমাগত আবির্ভাব। এই সব প্যাটার্ন বের করতে হবে। প্যাটার্নগুলো ওভারল্যাপ (overlap) হতে পারে। স্ট্রিং শুধু বাইনারি নয়, এতে ডিজিট ও লোয়ারকেস ক্যারেক্টারও থাকতে পারে। স্ট্রিং "1101001" হলে দুটি প্যাটার্ন: 101 এবং 1001।
সমাধানের ধাপ:
স্ট্রিং-এর সব ক্যারেক্টার c ঘুরে বের করা
c = '1' হলে, '0' পাওয়া পর্যন্ত ঘুরা
০-এর স্ট্রিম (stream) শেষ হলে, পরবর্তী ক্যারেক্টার '1' কিনা যাচাই করা
এই ধাপগুলো স্ট্রিং শেষ পর্যন্ত রিপিট করা
উদাহরণ
#include<iostream> using namespace std; int countBinPattern(string main_str) { char last_char = main_str[0]; int i = 1, counter = 0; while (i < main_str.size()) { if (main_str[i] == '0' && last_char == '1') { while (main_str[i] == '0') i++; if (main_str[i] == '1') counter++; } last_char = main_str[i]; i++; } return counter; } int main() { string str = "10010110000101"; cout << "Number of substrings of pattern 1(0+)1 is: " << countBinPattern(str); } আউটপুট
Number of substrings of pattern 1(0+)1 is: 4