Chúng ta được cung cấp hai chuỗi, tức là str1 và str2 và nhiệm vụ là tính toán số lượng các chuỗi hoàn toàn có thể được tạo ra từ một chuỗi khác, nhưng chúng ta có thể sử dụng một ký tự một lần để tạo chuỗi. Giống như, chúng ta sẽ lấy hai chuỗi str1 và str2 và kiểm tra sự xuất hiện của str2 trong str1 bằng cách sử dụng ký tự của str1 chính xác một lần.
Đầu vào - str_1 ="học kỹ thuật", str_2 ="học tập"
Đầu ra - Số lượng chuỗi có thể được hình thành từ một chuỗi khác bằng cách sử dụng mỗi ký tự nhiều nhất một lần là - 1
Giải thích - Như chúng ta có thể thấy str_2 xuất hiện trong str_1 chính xác một lần. Vì vậy, số lượng str_1 trong str_2 là 1.
Đầu vào - str_1 =“ellohsehelloabcoelhl, str_2 =“ helllo ”
Đầu ra - Số lượng các chuỗi có thể được hình thành từ một chuỗi khác bằng cách sử dụng mỗi ký tự nhiều nhất một lần là - 3
Giải thích - Như chúng ta có thể thấy str_2 là xin chào, do đó chúng tôi sẽ kiểm tra sự hình thành của từ xin chào bằng cách sử dụng các ký tự của str_1 chính xác một lần. Như chúng ta thấy, có 3 dạng từ hello trong str_1 do đó số lượng là 3.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Nhập chuỗi str_1 và str_2 và tính toán độ dài tương ứng của chúng và chuyển dữ liệu vào hàm để xử lý thêm.
-
Khai báo số lượng biến tạm thời để lưu trữ số lượng str_2 trong str_1 và khởi tạo nó bằng INT_MAX. INT_MAX được sử dụng trong C ++ để chỉ định giá trị lớn nhất mà một biến có thể giữ và giá trị của INT_MAX là +2147483647.
-
Tạo một mảng kích thước 26 vì chúng ta có 26 bảng chữ cái tiếng Anh và khởi tạo nó bằng 0.
-
Bắt đầu vòng lặp FOR từ 0 cho đến hết độ dài của chuỗi str_1 và đặt arr [str_1 [i] - ‘a’] bằng 1
-
Bắt đầu một vòng lặp FOR khác từ 0 cho đến hết độ dài của chuỗi str_2 và đặt số đếm là số đếm tối thiểu hoặc arr [str_2 [i] - ‘a’].
-
Số lần trả lại
-
In kết quả.
Ví dụ
#include <bits/stdc++.h> using namespace std; int atmost_once(string str_1, int len_str1, string str_2, int len_str2){ int count = INT_MAX; int arr[26] = { 0 }; for (int i = 0; i < len_str1 ; i++){ arr[str_1[i] - 'a'] += 1; } for (int i = 0; i < len_str2; i++){ count = min(count, arr[str_2[i] - 'a']); } return count; } int main(){ string str_1 = "technical learning"; int length_str1 = str_1.length(); string str_2 = "learning"; int length_str2 = str_2.length(); cout<<"Count of strings that can be formed from another string using each character at-most once are: "<<atmost_once(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 strings that can be formed from another string using each character at-most once are: 1