在C ++中从字符串中移除给定子序列的最大数量

给定任务是找到从字符串中移除给定子序列的最大数量。给出了字符串s,我们必须找到可以从字符串中删除的子序列'abc'的最大数量。

现在让我们通过一个示例来了解我们必须做什么:

输入项

s = ‘dnabcxy’

输出结果

1

说明-在给定的字符串('dnabcxy')中只能找到一个'abc'子序列,因此输出为1。

输入项

s = ‘zcabcxabc’

输出结果

2 (‘zcabcxabc’)

在以下程序中使用的方法如下

  • Max()函数中,初始化变量i,a,ab,abc,其值为0且类型为int。

  • 从i = 0循环直到I <s.length()

  • 在循环内检查是否(s [i] =='a'),如果是,则递增a的值。

  • 否则,检查(s [i] =='b'),如果为true,则再次检查(a> 0)。如果两个条件都成立,则将a的值减小1并增加ab的值。

  • 最后,检查(s [i] =='c'),如果为true,则再次检查(ab> 0)。如果两个条件都成立,则将ab的值减小1并增加abc的值。

  • 返回abc

示例

#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;
}
//主要功能
int main(){
   string s = "zcabcxabc";
   cout << Max(s);
   return 0;
}

输出结果

2