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

Số lần xóa tối đa của dãy con đã cho khỏi một chuỗi trong C ++

Nhiệm vụ được đưa ra là tìm số lần loại bỏ tối đa của dãy con đã cho khỏi một chuỗi. Astring s được đưa ra và chúng tôi phải tìm số lượng tối đa của dãy con ‘abc’ có thể được loại bỏ khỏi chuỗi.

Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ:

Đầu vào

s = ‘dnabcxy’

Đầu ra

1

Giải thích - Chỉ có thể tìm thấy một dãy con của ‘abc’ trong chuỗi đã cho (‘dnabcxy’), do đó đầu ra là 1.

Đầu vào

s = ‘zcabcxabc’

Đầu ra

2 (‘zcabcxabc’)

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Trong hàm Max (), khởi tạo các biến i, a, ab, abc với value =0 và kiểu int.

  • Vòng lặp từ i =0 đến I

  • Bên trong vòng lặp, hãy kiểm tra if (s [i] ==‘a’), nếu vậy thì giá trị gia tăng của a.

  • Nếu không, hãy kiểm tra if (s [i] ==‘b’), nếu đúng thì kiểm tra lại if (a> 0). Nếu cả hai điều kiện đều có giá trị thì hãy giảm giá trị của a đi 1 và tăng giá trị của ab.

  • Cuối cùng, kiểm tra if (s [i] ==‘c’), nếu đúng thì kiểm tra lại if (ab> 0). Nếu cả hai điều kiện đều đúng thì hãy giảm giá trị của ab đi 1 và tăng giá trị của abc.

  • Trả lại abc

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int Max(string s){
   int i=0, a=0, ab=0, abc=0;
   for (i = 0; i < s.length(); i++){
      if (s[i] == 'a'){
         a++;
      }
      else if (s[i] == 'b'){
         if (a > 0){
            a--;
            ab++;
         }
      }
      else if (s[i] == 'c'){
         if (ab > 0){
            ab--;
            abc++;
         }
      }
   }
   return abc;
}
//main function
int main(){
   string s = "zcabcxabc";
   cout << Max(s);
   return 0;
}

Đầu ra

2