Chúng tôi được cung cấp chuỗi str chỉ chứa 0, 1 và 2. Mục tiêu là tìm tất cả các chuỗi con của str có số lượng bằng nhau của 0’s 1 và 2’s. Nếu str là “12012”. Các chuỗi con có số 0, 1 và 2 bằng nhau sẽ là “120”, “201” và “012”. Số lượng sẽ là 3.
Hãy cho chúng tôi hiểu với các ví dụ.
Đầu vào - str =”112200120”
Đầu ra −Tổng số các chuỗi con có số 0, 1 và 2 bằng nhau là - 5
Giải thích - Các chuỗi con sẽ là
str[0-5]=”112200”, str[1-6]=”122001”, str[5-7]=”012”, str[6-8]=”120”, str[7-0]=”201”
Đầu vào - str =”12012”
Đầu ra −Tổng số chuỗi con có số 0, 1 và 2 bằng nhau là:3
Giải thích - Các chuỗi con sẽ -
str[0-2]=”120” , str[1-3]=”201”, str[2-4]=”012”
Cách tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Lấy một chuỗi các giá trị số nguyên và tính độ dài của một chuỗi
-
Chuyển dữ liệu đến hàm để xử lý thêm.
-
Lấy một số biến tạm thời để lưu trữ số lượng các chuỗi con có số lượng bằng nhau là 0, 1 và 2.
-
Tạo một biến kiểu bản đồ ánh xạ cặp với tần số của các số đã cho.
-
Lưu trữ 1 ở cặp (0,0) và bắt đầu vòng lặp FOR từ 0 cho đến hết độ dài của một chuỗi.
-
Bên trong vòng lặp, hãy kiểm tra IF str [i] =0 rồi tăng số lượng cho 0’s, ELSE IF str [i] =1 rồi tăng số lượng cho 1’s, ELSE tăng số lượng cho 2’s.
-
Đặt 0’s và 1’s thành 0’s - 1’s và 0’s và 2’s thành 0’s - 2’s.
-
Tạo một cặp zero_one và zero_two và đặt số lượng là count + map_pair của giá trị chênh lệch được tính bằng cách tạo các cặp.
-
Tăng map_pair lên 1.
-
Số lần trả lại
-
In kết quả.
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -
Count of Substrings with equal number of 0s, 1s and 2s are: 1