C++ 程式碼查詢所有操作後的最小石子數


假設我們有一個包含 n 個字元的字串 S。字元將是 '+' 或 '-'。有一堆石頭,n 次我們從石頭堆中取走一塊石頭或向石頭堆中新增一塊石頭。在每次從石頭堆中取走一塊石頭的操作之前,石頭堆都不是空的。我們必須找到在進行這些操作後石頭堆中可能存在的最小數量的石頭。如果我們在第 i 次操作中取走了石頭,則 S[i] 等於 "-",如果添加了,則 S[i] 等於 "+"。

因此,如果輸入類似於 S = "++-++",則輸出將為 3。如果我們最初在石頭堆中擁有 0 塊石頭,則在進行操作後,石頭數量將等於 3。

步驟

為了解決這個問題,我們將遵循以下步驟:

n := size of S
for initialize i := 0, when i < n, update (increase i by 1), do:
   res := (if S[i] is same as '-', then maximum of res - 1 and 0,
otherwise res + 1)
return res

示例

讓我們看看以下實現以更好地理解:

#include <bits/stdc++.h>
using namespace std;
int solve(string S){
   int n = S.size(), res = 0;
   for (int i = 0; i < n; i++)
      res = (S[i] == '-') ? max(res - 1, 0) : res + 1;
   return res;
}
int main(){
   string S = "++-++";
   cout << solve(S) << endl;
}

輸入

"++-++"

輸出

3

更新於: 2022-03-29

213 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告