C ++中括号的分数

假设我们有一个平衡的括号字符串S,我们必须根据以下规则计算字符串的分数-

  • ()的得分为1

  • AB的得分为A + B,其中A和B是两个平衡的括号字符串。

  • (A)的分数为2 * A,其中A是平衡的括号字符串。

因此,如果输入类似于“(()(()))”,则输出将为6。

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

  • ans:= 0,定义堆栈st

  • 对于i,范围为0至字符串S的大小

    • 如果堆栈顶部为-1,则从堆栈中删除并将1插入堆栈

    • 除此以外

    • 由st增加x,从st删除

    • x:= 0

    • 而栈顶不是-1

    • x:= x * 2

    • 从st中删除,然后插入x

    • 如果S [i]是开括号,则将-1插入堆栈

    • 除此以外

    • 当堆栈不为空时

      • 通过st顶部增加ans,并删除top元素

    • 返回ans。

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

    示例

    #include <bits/stdc++.h>

    using namespace std;

    class Solution {

    public:

       int scoreOfParentheses(string S) {

          int ans = 0;

          stack <int> st;

          for(int i = 0; i < S.size(); i+=1){

             if(S[i] == '('){

                st.push(-1);

             }else{

                if(st.top() == -1){

                   st.pop();

                   st.push(1);

                }else{

                   int x = 0;

                   while(st.top() != -1){

                      x += st.top();

                      st.pop();

                   }

                   x *= 2;

                   st.pop();

                   st.push(x);

                }

             }

          }

          while(!st.empty()){

             ans += st.top();

             st.pop();

          }

          return ans;

       }

    };

    main(){

       Solution ob;

       cout << (ob.scoreOfParentheses("(()(()))"));

    }

    输入值

    "(()(()))"

    输出结果

    6

    以上是 C ++中括号的分数 的全部内容, 来源链接: utcz.com/z/343394.html

    回到顶部