यहां हम एक और दिलचस्प समस्या देखेंगे। हमें एक कोड लिखना है जो एक स्ट्रिंग को स्वीकार करता है, जिसमें निम्नलिखित मानदंड हैं।
- लगातार 1s के प्रत्येक समूह की लंबाई 2 होनी चाहिए
- लगातार 1 के प्रत्येक समूह को 1 या अधिक 0 के बाद प्रकट होना चाहिए
मान लीजिए 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