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
广告