मान लीजिए कि हमारे पास एक बाइनरी स्ट्रिंग एस और एक सकारात्मक पूर्णांक एन है, हमें सच कहना होगा अगर और केवल अगर 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