给定任务是找到从字符串中移除给定子序列的最大数量。给出了字符串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