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

จำนวนสตริงย่อยของสตริงไบนารีที่มี K ใน C++


เราได้รับสตริงของเลขฐานสอง เช่น การรวมกันของ 0 และ 1 และค่าจำนวนเต็ม k และภารกิจคือการคำนวณจำนวนสตริงย่อยที่เกิดขึ้นจากสตริงไบนารีที่กำหนดโดยให้ k 1's

ป้อนข้อมูล − สตริง str ='1000000000000', k =2

ผลผลิต − จำนวนสตริงย่อยของสตริงไบนารีที่มีตัว K คือ − 6

คำอธิบาย สตริงย่อยที่สามารถสร้างได้จากสตริงที่กำหนดคือ 1, 10, 100, 1000, 10000, 010, 100001, 10001, 1001, 101, 11, 1000010 ดังนั้นจึงมี 6 สตริงย่อยที่มี k จำนวน 1 ตัว นั่นคือ 2 อันเท่านั้น

ป้อนข้อมูล − สตริง str ='1000000000000', k =3

ผลผลิต − จำนวนของสตริงย่อยของสตริงไบนารีที่มีตัว K คือ − 0

คำอธิบาย − เราได้รับค่าจำนวนเต็ม k เป็น 3 และหากเราตรวจสอบสตริงที่มีเลขฐานสอง ก็จะมีเพียง 2 ตัวเท่านั้น ดังนั้นจึงไม่มีความเป็นไปได้ที่สตริงย่อยจะให้จำนวน k อัน

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ป้อนสตริงของเลขฐานสองที่มีการรวมกันของ 0 และ 1 และตัวแปรจำนวนเต็ม k

  • คำนวณความยาวของสตริงโดยใช้ฟังก์ชัน length() และส่งผ่านข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป

  • ประกาศจำนวนตัวแปรชั่วคราวและผลรวมเป็น 0 สำหรับการจัดเก็บสตริงย่อยด้วย k ตัว

  • ประกาศอาร์เรย์เพื่อเก็บความถี่ของขนาดเท่ากับความยาวของสตริง บวกหนึ่ง และเริ่มต้นด้วย 0 และตั้งค่าองค์ประกอบแรกของอาร์เรย์เป็น 1

  • เริ่มการวนซ้ำ FOR จาก 0 จนถึงความยาวของอาร์เรย์

  • ภายในลูป ตั้งค่า Total เป็น Total + str[i] - '0' ตรวจสอบ IF total>=k แล้วตั้งค่า count เป็น count + arr[total-k]

  • จำนวนคืน

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int sub_k_ones(string str, int length, int k){
   int count = 0;
   int total_1 = 0;
   int arr_fre[length + 1] = {0};
   arr_fre[0] = 1;
   for (int i = 0; i < length; i++){
      total_1 = total_1 + (str[i] - '0');
      if (total_1 >= k){
         count = count + arr_fre[total_1 - k];
      }
      arr_fre[total_1]++;
   }
   return count;
}
int main(){
   string str = "10000100000";
   int length = str.length();
   int k = 2;
   cout<<"Count of substrings of a binary string containing K ones are: "<<sub_k_ones(str, length, k) << endl;
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of substrings of a binary string containing K ones are: 6