यहां हम एक और दिलचस्प समस्या देखेंगे। हमें एक ऐसा कोड लिखना है जो एक स्ट्रिंग स्वीकार करे, जिसमें निम्नलिखित मानदंड हों:
- लगातार 1s का हर ग्रुप लंबाई 2 का होना चाहिए
- लगातार 1s का हर ग्रुप 1 या अधिक 0s के बाद आना चाहिए
मान लीजिए एक स्ट्रिंग है जैसे 0110, यह वैलिड स्ट्रिंग है, जबकि 001110, 010 वैलिड नहीं हैं।
यहां दृष्टिकोण सरल है। हमें 1 के ऑकरेंस ढूंढने हैं और जांचना है कि क्या यह सब-स्ट्रिंग 011 का हिस्सा है या नहीं। यदि किसी भी सब-स्ट्रिंग के लिए कंडीशन फेल होती है तो false रिटर्न करें, अन्यथा true।
उदाहरण
#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) //जब स्ट्रिंग 1 से शुरू होती है, तो false रिटर्न करें return false; while (index <= n - 1) { if (str[index - 1] != '0') // यदि 1 किसी 0 के बाद नहीं आता return false; if (index + 1 < n && str[index + 1] != '1') // यदि '1' के बाद दूसरा '1' नहीं है return false; if (index + 2 < n && str[index + 2] == '1') // यदि सब-स्ट्रिंग "0111" टाइप की है return false; if (index == n - 1) // यदि स्ट्रिंग सिंगल 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