เราได้รับสตริง 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