मान लीजिए कि हमारे पास एक स्ट्रिंग s है, हमें सन्निहित सबस्ट्रिंग्स की संख्या ज्ञात करनी है जिनमें 0 और 1 की संख्या समान है, और इन सबस्ट्रिंग्स में सभी 0 और सभी 1 को क्रमिक रूप से समूहीकृत किया गया है। यदि सबस्ट्रिंग कई बार होते हैं तो उनके आने की संख्या की गणना की जाती है।
इसलिए, यदि इनपुट "11001100" जैसा है, तो आउटपुट 6 होगा, क्योंकि सबस्ट्रिंग "1100", "10", "0011", "01", "1100", "10" हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- आकार 2 की एक सरणी परिभाषित करें और इसे 0 से भरें
- res :=0
- इनिशियलाइज़ i :=0 के लिए, जब i
करें- संख्या:=s[i] - '0' का ASCII
- यदि मैं 0 के समान है या s[i] s[i - 1] के बराबर नहीं है, तो −
- cnt[num] :=0
- (cnt[num] 1 से बढ़ाएं)
- यदि cnt[num] <=cnt[1 - num], तो −
- (रेस 1 से बढ़ाएँ)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: int countBinarySubstrings(string s) { int cnt[2] = { 0 }; int res = 0; for (int i = 0; i < s.length(); ++i) { int num = s[i] - '0'; if (i == 0 || s[i] != s[i - 1]) cnt[num] = 0; ++cnt[num]; if (cnt[num] <= cnt[1 - num]) ++res; } return res; } }; main(){ Solution ob; cout << (ob.countBinarySubstrings("11001100")); }
इनपुट
"11001100"
आउटपुट
6