Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตรวจสอบว่าสตริงมีรหัสไบนารีทั้งหมดของขนาด K ใน C++ . หรือไม่


สมมติว่าเรามีสตริงไบนารี s และจำนวนเต็ม k เราต้องตรวจสอบว่าทุกรหัสไบนารีที่มีความยาว k เป็นสตริงย่อยของ s หรือไม่ มิเช่นนั้นให้คืนค่าเป็นเท็จ

ดังนั้น หากอินพุตเป็น S ="00110110", k =2 เอาต์พุตจะเป็นจริง รหัสเลขฐานสองที่มีความยาว 2 คือ "00", "01", "10" และ "11" มีอยู่ในดัชนี 0, 1, 3 และ 2 ตามลำดับ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่งชุด v

  • temp :=สตริงว่าง

  • ต้องการ :=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