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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告