ধরুন আমাদের একটি বাইনারি স্ট্রিং s এবং একটি পূর্ণসংখ্যা k আছে। k দৈর্ঘ্যের প্রতিটি বাইনারি কোড s এর সাবস্ট্রিং কিনা তা আমাদের পরীক্ষা করতে হবে। অন্যথায়, মিথ্যা ফেরত দিন।
সুতরাং, যদি ইনপুটটি S ="00110110", k =2 এর মত হয়, তাহলে আউটপুটটি সত্য হবে। দৈর্ঘ্য 2 এর বাইনারি কোড হল "00", "01", "10" এবং "11"। এগুলি যথাক্রমে সূচক 0, 1, 3 এবং 2 এ উপস্থিত।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি সেট v
সংজ্ঞায়িত করুন -
temp :=ফাঁকা স্ট্রিং
-
req :=2^k
-
আরম্ভ করার জন্য i :=0, যখন i
-
temp :=temp + s[i]
-
যদি i>=k, তাহলে −
-
টেম্পের প্রথম সূচক থেকে একটি অক্ষর মুছুন
-
-
যদি i>=k - 1, তাহলে −
-
v
-এ তাপমাত্রা সন্নিবেশ করান
-
-
যদি v এর আকার req এর সমান হয়, তাহলে −
-
প্রত্যাবর্তন সত্য
-
-
-
মিথ্যা ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#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