এখানে আমরা আরেকটি আকর্ষণীয় সমস্যা দেখতে পাব। আমাদের একটি কোড লিখতে হবে যা একটি স্ট্রিং গ্রহণ করে, যার নিম্নলিখিত মানদণ্ড রয়েছে৷
- পরপর 1s এর প্রতিটি গ্রুপ, অবশ্যই 2 এর দৈর্ঘ্য হতে হবে
- পরপর 1s-এর প্রতিটি গ্রুপ অবশ্যই 1 বা তার বেশি 0s পরে উপস্থিত হবে
ধরুন 0110 এর মত একটি স্ট্রিং আছে, এটি বৈধ স্ট্রিং, 001110, 010 বৈধ না হোক
এখানে পদ্ধতি সহজ. আমাদের 1 এর ঘটনাগুলি খুঁজে বের করতে হবে এবং এটি সাব-স্ট্রিং 011 এর অংশ কিনা তা পরীক্ষা করতে হবে। যদি কন্ডিশন ব্যর্থ হয়, কোন সাবস্ট্রিং এর জন্য, তাহলে মিথ্যা ফেরত দিন, অন্যথায় সত্য।
উদাহরণ
#include <bits/stdc++.h> using namespace std; bool isValidStr(string str) { int n = str.length(); int index = find(str.begin(), str.end(), '1') - str.begin(); if (index == 0) //when the string starts with 1, then return false return false; while (index <= n - 1) { if (str[index - 1] != '0') // If 1 doesn't appear after an 0 return false; if (index + 1 < n && str[index + 1] != '1') // If '1' is not succeeded by another '1' return false; if (index + 2 < n && str[index + 2] == '1') // If sub-string is of the type "0111" return false; if (index == n - 1) // If str ends with a single 1 return false; index = find(str.begin() + index + 2, str.end(), '1') - str.begin(); } return true; } int main() { string str = "011000110110"; if(isValidStr(str)){ cout << str << " is a valid string"; } else { cout << str << " is NOT a valid string"; } }
আউটপুট
011000110110 is a valid string