हमें एक स्ट्रिंग str दी गई है जिसमें 0, 1 और अन्य वर्णमालाएं हैं। इसमें "1(0+)1" रूप के पैटर्न भी हैं जहां 0+ का अर्थ है लगातार 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"
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण
यह देखा जा सकता है कि सभी पैटर्न 1 से शुरू और खत्म होते हैं। हम फ्लैग वेरिएबल check=1 का उपयोग करके पहले 1 को चिह्नित करेंगे और सभी 0 को छोड़ देंगे।
किसी अन्य वर्ण (न तो 0 और न ही 1) के लिए check को 0 सेट करें।
यदि हमें एक और 1 मिलता है और फ्लैग check 1 है तो देखें कि पिछला मान 0 है या नहीं। यदि हां तो गिनती बढ़ाएं क्योंकि पिछला 0 दो 1 के बीच में है। किसी गैर 0 या 1 के लिए check को फिर से 0 सेट करें।
- इनपुट स्ट्रिंग को str के रूप में लें।
- फ़ंक्शन Pattern_occurrences(string str, int length) स्ट्रिंग और उसकी लंबाई लेता है और स्ट्रिंग में "1(0+)1" पैटर्न की घटनाओं की गिनती वापस करता है
- प्रारंभिक गिनती 0 लें।
- फ्लैग वेरिएबल check को प्रारंभ में 0 लें।
- फॉर लूप का उपयोग करके इंडेक्स i=0 से i
- यदि वर्तमान वर्ण str[i] 1 है और check 0 है तो check को 1 सेट करें और जारी रखें।
- यदि वर्तमान वर्ण str[i] 1 है और check 1 है। तो यह दूसरा 1 है। जांचें कि पिछला मान str[i-1] 0 है या नहीं। यदि हां तो पैटर्न मिला। गिनती बढ़ाएं।
- यदि वर्तमान वर्ण न तो 0 है और न ही 1 तो यह कभी भी पैटर्न का हिस्सा नहीं होगा। check को 0 सेट करें। अब अगला मिला 1 अगले पैटर्न की शुरुआत माना जाएगा (यदि मौजूद है)।
- अंत में गिनती में str के अंदर ऐसे पैटर्न की संख्या होगी।
- परिणाम के रूप में गिनती वापस करें।
उदाहरण
#include<iostream>
using 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