Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm chuỗi con có số lượng 0, 1 và 2 bằng nhau trong C ++

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