समस्या विवरण
एक बाइनरी स्ट्रिंग और पूर्णांक k दिया गया है। जांचें कि स्ट्रिंग में k-बिट बाइनरी संख्याओं के सभी 2^k क्रमचय सबस्ट्रिंग के रूप में मौजूद हैं या नहीं।
उदाहरण: str="11001", k=2 → आवश्यक: 00, 01, 10, 11 → सभी मौजूद हैं → YES
एल्गोरिदम
- k लंबाई के सभी 2^k बाइनरी क्रमचय उत्पन्न करें
- प्रत्येक क्रमचय के लिए जांचें कि वह दिए गए स्ट्रिंग में सबस्ट्रिंग के रूप में है या नहीं
- सभी मिल जाएं → true, अन्यथा false
उदाहरण कोड
#include <iostream> #include <vector> #include <cmath> using namespace std; vectorbinaryPermutations(int k) { vector list; string binStr(k, '0'); list.push_back(binStr); int limit = pow(2, k); for (int i = 1; i < limit; i++) { int j = 0; while (j <= k) { if (binStr[k-1-j] == '0') { binStr[k-1-j] = '1'; break; } else { binStr[k-1-j] = '0'; j++; } } list.push_back(binStr); } return list; } bool hasAllPermutation(string str, int k) { vector list = binaryPermutations(k); for (string substr : list) { if (str.find(substr) == string::npos) return false; } return true; } int main() { int k = 2; string str = "11001"; if (hasAllPermutation(str, k)) cout << "Has All Permutations"; else cout << "Not All Permutations are found"; return 0; }
आउटपुट
Has All Permutations