You are given a 0-indexed string s
of even length n
. The string consists of exactly n / 2
opening brackets '['
and n / 2
closing brackets ']'
.
A string is called balanced if and only if:
- It is the empty string, or
- It can be written as
AB
, where bothA
andB
are balanced strings, or - It can be written as
[C]
, whereC
is a balanced string.
You may swap the brackets at any two indices any number of times.
Return the minimum number of swaps to make s
balanced.
Example 1:
Input: s = "][][" Output: 1 Explanation: You can make the string balanced by swapping index 0 with index 3. The resulting string is "[[]]".
Example 2:
Input: s = "]]][[[" Output: 2 Explanation: You can do the following to make the string balanced: - Swap index 0 with index 4. s = "[]][][". - Swap index 1 with index 5. s = "[[][]]". The resulting string is "[[][]]".
Example 3:
Input: s = "[]" Output: 0 Explanation: The string is already balanced.
Constraints:
n == s.length
2 <= n <= 106
n
is even.s[i]
is either'['
or']'
.- The number of opening brackets
'['
equalsn / 2
, and the number of closing brackets']'
equalsn / 2
.
Approach 01:
-
C++
-
Python
#include <string> using namespace std; class Solution { public: int minSwaps(string bracketString) { // Cancel out all the matched pairs, then we'll be left with "]]]..[[[". // The answer is ceil(the number of unmatched pairs / 2). int unmatchedOpenBrackets = 0; for (const char currentChar : bracketString) { if (currentChar == '[') ++unmatchedOpenBrackets; else if (unmatchedOpenBrackets > 0) // currentChar == ']' and there's a match. --unmatchedOpenBrackets; } return (unmatchedOpenBrackets + 1) / 2; } };
from typing import * class Solution: def minSwaps(self, bracketString): # Cancel out all the matched pairs, then we'll be left with "]]]..[[[". # The answer is ceil(the number of unmatched pairs / 2). unmatchedOpenBrackets = 0 for currentChar in bracketString: if currentChar == '[': unmatchedOpenBrackets += 1 elif unmatchedOpenBrackets > 0: # currentChar == ']' and there's a match. unmatchedOpenBrackets -= 1 return (unmatchedOpenBrackets + 1) // 2
Time Complexity
- Iterating through the bracket string:
The function iterates through each character in the input string exactly once to calculate the number of unmatched open brackets. This takes \(O(n)\), where \(n\) is the length of the input string.
- Overall Time Complexity:
The overall time complexity is \(O(n)\), where \(n\) is the length of the input string.
Space Complexity
- Auxiliary Space:
The function only uses a constant amount of extra space to store the variable
unmatchedOpenBrackets
. Therefore, the space complexity is \(O(1)\). - Overall Space Complexity:
The overall space complexity is \(O(1)\), as the amount of extra space used does not depend on the size of the input string.