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

Khả năng có một từ từ một bộ ký tự nhất định trong C ++


Trong bài toán này, chúng ta là hai chuỗi str1 và str2. Nhiệm vụ của chúng ta là kiểm tra xem tất cả các ký tự của str2 và có trong str1 hay không.

Hãy lấy một ví dụ để hiểu vấn đề

Đầu vào -

str1 = “Hello”
str2 = “Hell”

Đầu ra - vâng

Giải thích - tất cả các ký tự của str2 đều có trong str1.

Để giải quyết vấn đề này, một giải pháp đơn giản sẽ là kiểm tra từng ký tự của str2 trong str1 và sau đó trả về giải pháp.

Nhưng chúng ta cần tạo ra các giải pháp hiệu quả. Vì vậy, chúng tôi sẽ sử dụng một mảng tần số (độ dài 256 cho tất cả các ký tự hợp lệ), sau đó duyệt qua str1 và tăng giá trị trong mảng tần số dựa trên ký tự tương ứng hơn đã xảy ra. Sau đó, chúng ta sẽ duyệt qua str2, điều này sẽ làm giảm mảng tần số khi xuất hiện. Và ở mỗi lần lặp, chúng tôi cũng sẽ kiểm tra xem tần số này có trở thành âm hay không. Nếu có thì không thể, ngược lại thì có thể.

Ví dụ

Chương trình cho thấy việc triển khai giải pháp của chúng tôi

#include <iostream>
#include <string.h>
using namespace std;
bool isPresent(string str1, string str2){
   int freq[256] = { 0 };
   for (int i = 0; i<str1.length(); i++)
      freq[str1[i]]++;
   for (int i=0;i<str2.length(); i++) {
         if (freq[str2[i]] < 1)
            return false;
   }
   return true;
}
int main() {
   string str1 = "tutorialspoint";
   string str2 = "point";
   cout<<"All charcters of '"<<str2<<"' are ";
   isPresent(str1,str2)?cout<<"present":cout<<"not present";
   cout<<" in '"<<str1<<"' ";
   return 0;
}

Đầu ra

All charcters of 'point' are present in 'tutorialspoint'