C++ 中括号的最小添加

c++server side programmingprogramming

假设我们有一个字符串 s,其中只包含"("和")",我们需要找到可以插入的最小括号数量,以使字符串平衡。

因此,如果输入类似于"(()))(",则输出将为 2,因为"(()))(",这可以像"((()))()"一样进行平衡。

为了解决这个问题,我们将遵循以下步骤 −

  • := 0, cnt := 0

  • 初始化 i := 0,当 i < s 的大小时,更新(将 i 增加 1),执行 −

    • 如果 s[i] 与 '(' 相同,则 −

      • (将 o 增加 1)

    • 否则

      • 如果 o 非零,则 −

        • (将 o 减少 1)

      • 否则

        • (将 cnt 增加 1)

  • return cnt + o

让我们看看下面的实现以便更好地理解 −

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(string s) {
      int o = 0;
      int cnt = 0;
      for(int i = 0; i < s.size(); i++){
         if(s[i] == '('){
            o++;
         } else {
            if(o)
               o--;
            else
               cnt++;
         }
      }
      return cnt + o;
   }
};
int main(){
   Solution ob;
   cout << (ob.solve("(()))("));
}

输入

Input:
"(()))("

输出

2

相关文章