Given a numeric string S made up of characters '1', '2' and '3' only, the task is to replace characters with either an open bracket ( '(' ) or a closed bracket ( ')' ) such that the newly formed string becomes a balanced bracket sequence.
Note: All occurrences of a character must be replaced by the same parentheses.
Examples:
Input: S = "1123"
Output: Yes, (())
Explanation: Replacing occurrences of character '1' with '(', '2' with ')' and '3' with ')'. Therefore, the obtained bracket sequence is “(())”, which is balanced.
Input: S = "1121"
Output: No
Approach: The given problem can be solved based on the following observations:
- For a balanced bracket sequence, it is necessary for the first and last characters to be open and closed brackets respectively. Therefore, the first and the last characters should be different.
- If the first and the last characters of a string are the same, then it is impossible to obtain a balanced bracket sequence.
- If the first and last characters of a string are different, then they are replaced by open and closed brackets respectively. The third character is replaced either by open or closed brackets.
- Check for both ways of replacements one by one for the remaining third character.
- If both replacements of the third remaining character can't make a balanced bracket sequence, then it is impossible to make a balanced bracket sequence.
Follow the steps below to solve the given problem:
- Check if the first and last characters of the string S are equal or not. If found to be true, then print "No" and return.
- Initialize two variables, say cntforOpen and cntforClose, to store the count of open and closed brackets.
- Iterate over the characters of the string and perform the following operations:
- If the current character is the same as the first character of the string, increment cntforOpen.
- If the current character is the same as the last character of the string, decrement cntforOpen.
- For the remaining third character, increment cntforOpen, i.e. replacing that character with '('.
- If at any instant, cntforOpen is found to be negative, then a balanced bracket sequence cannot be obtained.
- Similarly, check using cntforClose variable, i.e. replacing the third character with ')'.
- If none of the above two methods generates a balanced bracket sequence, then print "No". Otherwise, print "Yes".
Below is the implementation of the above approach:
Time Complexity: O(N)
Auxiliary Space: O(1)