Count the Reversals
Problem Statement - link #
Given a string S consisting of only opening and closing brackets ‘[’ and ‘]’, find out the minimum number of reversals required to convert the string into a balanced expression. A reversal means changing ‘[’ to ‘]’ or vice-versa
Your Task: You don’t need to read input or print anything. Your task is to complete the function countRev() which takes the string S as input parameter and returns the minimum number of reversals required to balance the bracket sequence. If balancing is not possible, return -1.
Expected Time Complexity: O(N) Expected Auxiliary Space: O(1)
Examples #
Example 1:
Input:
S = "][[]][[["
Output: 3
Explanation: One way to balance is:
"[[[]][]]". There is no balanced sequence
that can be formed in lesser reversals.
Example 2:
Input: 
S = "[[][[[][[]][["
Output: -1
Explanation: There's no way we can balance
this sequence of braces.
Constraints #
1 <= N <= 10^5
Solutions #
class Solution{
    public:
    int countRev (string s)
    {
        // your code here
        int n=s.size();
        if(n%2)return -1;
        int open=0,close=0,res=0;
        for(int i=0;i<n;i++){
            if(s[i]=='}')
                if(open<=close){res++;open++;}
                else close++;
            else open++;
        }
        return res+abs(open-close)/2;
    }
};