मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग एस और एक सकारात्मक पूर्णांक एन है, हमें सच कहना होगा अगर और केवल अगर 1 से एन तक प्रत्येक पूर्णांक एक्स के लिए, एक्स का बाइनरी प्रतिनिधित्व दिए गए एस का एक विकल्प है। इसलिए यदि एस ="0110 ” और N =3, तो परिणाम सत्य होगा, क्योंकि 1, 10 और 11 सभी 0110 में मौजूद हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
कनवर्ट करने के लिए एक विधि परिभाषित करें (), जो n को इनपुट के रूप में लेगा
-
रिट:=एक खाली स्ट्रिंग
-
जबकि n 0 नहीं है
-
रिट :=रिट कॉन्टेनेट एन मॉड 2
-
n :=n/2
-
-
रिवर्स रिट और रिटर्न
-
मुख्य विधि से, निम्न कार्य करें
-
i के लिए :=N, जब i>=N/2, i को 1 से घटाएं
-
अस्थायी:=कन्वर्ट (i)
-
अगर अस्थायी एस में नहीं है, तो झूठी वापसी करें
-
-
सच लौटें।
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; class Solution { public: string convert(int n){ string ret = ""; while(n){ ret += (n % 2) + '0'; n /= 2; } reverse(ret.begin(), ret.end()); return ret; } bool queryString(string S, int N) { for(int i = N; i >= N/2; i-- ){ string temp = convert(i); if(S.find(temp) == string::npos) return false; } return true; } }; main(){ Solution ob; cout << (ob.queryString("0110", 3)); }
इनपुट
"0110" 3
आउटपुट
1