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

นับสตริงย่อยด้วยจำนวนเท่ากับ 0s, 1s และ 2s ใน C++


เราได้รับสตริง str ที่มี 0's, 1's และ 2's เท่านั้น เป้าหมายคือการหาสตริงย่อยทั้งหมดของ str ที่มีจำนวนเท่ากับ 0's 1's และ 2's ถ้า str เป็น “12012” สตริงย่อยที่มีค่าเท่ากับ 0, 1 และ 2 จะเป็น "120", "201" และ "012" นับเป็น 3

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − str=”112200120”

ผลผลิต −จำนวนสตริงย่อยที่มีจำนวนเท่ากับ 0, 1 และ 2 คือ − 5

คำอธิบาย − สตริงย่อยจะเป็น

str[0-5]=”112200”, str[1-6]=”122001”, str[5-7]=”012”, str[6-8]=”120”, str[7-0]=”201”

ป้อนข้อมูล − str=”12012”

ผลผลิต −จำนวนสตริงย่อยที่มีจำนวนเท่ากับ 0, 1 และ 2 คือ:3

คำอธิบาย − สตริงย่อยจะเป็น −

str[0-2]=”120” , str[1-3]=”201”, str[2-4]=”012”

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

  • หาค่าสตริงของค่าจำนวนเต็มและคำนวณความยาวของสตริง

  • ส่งข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป

  • ใช้การนับตัวแปรชั่วคราวเพื่อเก็บจำนวนสตริงย่อยที่มีจำนวนเท่ากับ 0, 1 และ 2

  • สร้างตัวแปรประเภท map ซึ่งจับคู่กับความถี่ของตัวเลขที่กำหนด

  • จัดเก็บ 1 ที่คู่ (0,0) และเริ่มวนรอบ FOR จาก 0 จนถึงความยาวของสตริง

  • ภายในลูป ให้ตรวจสอบ IF str[i] =0 จากนั้นให้เพิ่มจำนวนสำหรับ 0, ELSE IF str[i] =1 จากนั้นเพิ่มการนับสำหรับ 1, ELSE เพิ่มการนับสำหรับ 2's

  • ตั้งค่า 0 และ 1 เป็น 0 - 1 และ 0 และ 2 ถึง 0 - 2

  • สร้างคู่ของ zero_one และ zero_two และตั้งค่าการนับเป็น count + map_pair ของค่าส่วนต่างซึ่งคำนวณโดยการสร้างคู่

  • เพิ่ม map_pair ขึ้น 1

  • จำนวนคืน

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

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int count_string(string str_1, int length_str1, string str_2, int length_str2){
   int count = INT_MAX;
   int arr_1[26] = { 0 };
   int arr_2[26] = { 0 };
   for (int i = 0; i < length_str1; i++){
      arr_1[str_1[i] - 'a']++;
   }
   for (int i = 0; i < length_str2; i++){
      arr_2[str_2[i] - 'a']++;
   }
   int alphabets = 26;
   for (int i = 0; i < alphabets; i++){
      if(arr_2[i]){
         count = min(count, arr_1[i] / arr_2[i]);
      }
   }
   return count;
}
int main(){
   string str_1 = "knowledge", str_2 = "know";
   int length_str1 = str_1.size();
   int length_str2 = str_2.size();
   cout<<"Count occurrences of a string that can be constructed from another given string are: "<<count_string(str_1,length_str1, str_2, length_str2);
   return 0;
}

ผลลัพธ์

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

Count of Substrings with equal number of 0s, 1s and 2s are: 1