मान लीजिए हमारे पास एक बाइनरी स्ट्रिंग s और एक इंटीजर k है। हमें जांचना है कि क्या लंबाई k का हर बाइनरी कोड s का सबस्ट्रिंग है। अन्यथा, False लौटाएं।
इसलिए, यदि इनपुट है S = "00110110", k = 2, तो आउटपुट true होगा। लंबाई 2 के बाइनरी कोड "00", "01", "10" और "11" हैं। ये इंडेक्स 0, 1, 3, और 2 पर क्रमशः मौजूद हैं।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
एक सेट v परिभाषित करें
temp := खाली स्ट्रिंग
req := 2^k
i := 0 से शुरू करें, जब i < s का आकार, i बढ़ाते हुए, करें -
temp := temp + s[i]
यदि i >= k, तो -
temp के पहले इंडेक्स से एक कैरेक्टर हटाएं
यदि i >= k - 1, तो -
temp को v में डालें
यदि v का आकार, req के समान है, तो -
true लौटाएं
false लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: lli fastPow(lli b, lli p){ lli ret = 1; while (p) { if (p & 1) { ret *= b; } b *= b; p >>= 1; } return ret; } bool hasAllCodes(string s, int k) { unordered_set<string> v; string temp = ""; lli req = fastPow(2, k); for (lli i = 0; i < s.size(); i++) { temp += s[i]; if (i >= k) { temp.erase(0, 1); } if (i >= k - 1) { v.insert(temp); } if ((lli)v.size() == req) return true; } return false; } }; main(){ Solution ob; cout << (ob.hasAllCodes("00110110",2)); }इनपुट
"00110110",2
आउटपुट
1