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()

  • 在循环内部检查 if (s[i] == ‘a’),如果是,则将 a 的值加 1。

  • 否则,检查 if (s[i] == ‘b’),如果为真,则再次检查 if (a > 0)。如果两个条件都为真,则将 a 的值减 1 并将 ab 的值加 1。

  • 最后,检查 if (s[i] == ‘c’),如果为真,则再次检查 if (ab > 0)。如果两个条件都为真,则将 ab 的值减 1 并将 abc 的值加 1。

  • 返回 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;
}
//main function
int main(){
   string s = "zcabcxabc";
   cout << Max(s);
   return 0;
}

输出

2

更新于: 2020 年 8 月 3 日

160 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告