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 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告