VOOZH about

URL: https://www.geeksforgeeks.org/dsa/modify-a-numeric-string-to-a-balanced-parentheses-by-replacements/

⇱ Modify a numeric string to a balanced parentheses by replacements - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Modify a numeric string to a balanced parentheses by replacements

Last Updated : 23 Jul, 2025

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:  


Output: 
Yes, ()(())

 

Time Complexity: O(N)
Auxiliary Space: O(1)


 

Comment