Maximum length of balanced string after swapping and removal of characters
Last Updated :
16 Dec, 2022
Given a string str consisting of characters ‘(‘, ‘)’, ‘[‘, ‘]’, ‘{‘ and ‘}’ only. The task is to find the maximum length of the balanced string after removing any character and swapping any two adjacent characters.
Examples:
Input: str = “))[]]((”
Output: 6
The string can be converted to ()[]()
Input: str = “{{{{{{{}”
Output: 2
Approach: The idea is to remove extra unmatched parentheses from the string because we cannot generate a balanced pair for it and swap the remaining characters to balance the string. Therefore the answer is the equal summation of pairs of all balanced parenthesis. Note that we can move a character to any other place by adjacent swappings.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int maxBalancedStr(string s)
{
int open1 = 0, close1 = 0;
int open2 = 0, close2 = 0;
int open3 = 0, close3 = 0;
for ( int i = 0; i < s.length(); i++) {
switch (s[i]) {
case '(' :
open1++;
break ;
case ')' :
close1++;
break ;
case '{' :
open2++;
break ;
case '}' :
close2++;
break ;
case '[' :
open3++;
break ;
case ']' :
close3++;
break ;
}
}
int maxLen = 2 * min(open1, close1)
+ 2 * min(open2, close2)
+ 2 * min(open3, close3);
return maxLen;
}
int main()
{
string s = "))[]]((" ;
cout << maxBalancedStr(s);
return 0;
}
|
Java
class GFG
{
static int maxBalancedStr(String s)
{
int open1 = 0 , close1 = 0 ;
int open2 = 0 , close2 = 0 ;
int open3 = 0 , close3 = 0 ;
for ( int i = 0 ; i < s.length(); i++)
{
switch (s.charAt(i))
{
case '(' :
open1++;
break ;
case ')' :
close1++;
break ;
case '{' :
open2++;
break ;
case '}' :
close2++;
break ;
case '[' :
open3++;
break ;
case ']' :
close3++;
break ;
}
}
int maxLen = 2 * Math.min(open1, close1)
+ 2 * Math.min(open2, close2)
+ 2 * Math.min(open3, close3);
return maxLen;
}
public static void main(String[] args)
{
String s = "))[]]((" ;
System.out.println(maxBalancedStr(s));
}
}
|
Python3
def maxBalancedStr(s):
open1 = 0
close1 = 0
open2 = 0
close2 = 0
open3 = 0
close3 = 0
for i in range ( len (s)):
if (s[i] = = '(' ):
open1 + = 1
continue
if s[i] = = ')' :
close1 + = 1
continue
if s[i] = = '{' :
open2 + = 1
continue
if s[i] = = '}' :
close2 + = 1
continue
if s[i] = = '[' :
open3 + = 1
continue
if s[i] = = ']' :
close3 + = 1
continue
maxLen = ( 2 * min (open1, close1) +
2 * min (open2, close2) +
2 * min (open3, close3))
return maxLen
if __name__ = = '__main__' :
s = "))[]](("
print (maxBalancedStr(s))
|
C#
using System;
class GFG
{
static int maxBalancedStr( string s)
{
int open1 = 0, close1 = 0;
int open2 = 0, close2 = 0;
int open3 = 0, close3 = 0;
for ( int i = 0; i < s.Length; i++)
{
switch (s[i])
{
case '(' :
open1++;
break ;
case ')' :
close1++;
break ;
case '{' :
open2++;
break ;
case '}' :
close2++;
break ;
case '[' :
open3++;
break ;
case ']' :
close3++;
break ;
}
}
int maxLen = 2 * Math.Min(open1, close1)
+ 2 * Math.Min(open2, close2)
+ 2 * Math.Min(open3, close3);
return maxLen;
}
public static void Main()
{
string s = "))[]]((" ;
Console.WriteLine(maxBalancedStr(s));
}
}
|
PHP
<?php
function maxBalancedStr( $s )
{
$open1 = 0; $close1 = 0;
$open2 = 0; $close2 = 0;
$open3 = 0; $close3 = 0;
for ( $i = 0; $i < strlen ( $s ); $i ++)
{
switch ( $s [ $i ])
{
case '(' :
$open1 ++;
break ;
case ')' :
$close1 ++;
break ;
case '{' :
$open2 ++;
break ;
case '}' :
$close2 ++;
break ;
case '[' :
$open3 ++;
break ;
case ']' :
$close3 ++;
break ;
}
}
$maxLen = 2 * min( $open1 , $close1 )
+ 2 * min( $open2 , $close2 )
+ 2 * min( $open3 , $close3 );
return $maxLen ;
}
{
$s = "))[]]((" ;
echo (maxBalancedStr( $s ));
}
|
Javascript
<script>
function maxBalancedStr( s) {
var open1 = 0, close1 = 0;
var open2 = 0, close2 = 0;
var open3 = 0, close3 = 0;
for (i = 0; i < s.length; i++) {
switch (s.charAt(i)) {
case '(' :
open1++;
break ;
case ')' :
close1++;
break ;
case '{' :
open2++;
break ;
case '}' :
close2++;
break ;
case '[' :
open3++;
break ;
case ']' :
close3++;
break ;
}
}
var maxLen = 2 * Math.min(open1, close1)
+ 2 * Math.min(open2, close2)
+ 2 * Math.min(open3, close3);
return maxLen;
}
var s = "))[]]((" ;
document.write(maxBalancedStr(s));
</script>
|
Time Complexity: O(n), where n is the length of the given string.
Auxiliary Space: O(1), no extra space is required, so it is a constant.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...