Skip to content

Commit eec7f3e

Browse files
authored
Merge pull request TheAlgorithms#1029 from shellhub/dev
update BalancedBrackets
2 parents 9fdb1c8 + 8ae6b4e commit eec7f3e

File tree

1 file changed

+46
-50
lines changed

1 file changed

+46
-50
lines changed
Lines changed: 46 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
package data_structures.Stacks;
1+
package DataStructures.Stacks;
22

3-
import java.util.Scanner;
43
import java.util.Stack;
54

65
/**
7-
*
86
* The nested brackets problem is a problem that determines if a sequence of
97
* brackets are properly nested. A sequence of brackets s is considered properly
108
* nested if any of the following conditions are true: - s is empty - s has the
@@ -15,71 +13,69 @@
1513
* returns true if S is nested and false otherwise.
1614
*
1715
* @author akshay sharma
18-
* @date: 2017-10-17
1916
* @author <a href="https://github.com/khalil2535">khalil2535<a>
20-
*
17+
* @author shellhub
2118
*/
2219
class BalancedBrackets {
2320

2421
/**
22+
* Check if {@code leftBracket} and {@code rightBracket} is paired or not
23+
*
24+
* @param leftBracket left bracket
25+
* @param rightBracket right bracket
26+
* @return {@code true} if {@code leftBracket} and {@code rightBracket} is paired,
27+
* otherwise {@code false}
28+
*/
29+
public static boolean isPaired(char leftBracket, char rightBracket) {
30+
char[][] pairedBrackets = {
31+
{'(', ')'},
32+
{'[', ']'},
33+
{'{', '}'},
34+
{'<', '>'}
35+
};
36+
for (char[] pairedBracket : pairedBrackets) {
37+
if (pairedBracket[0] == leftBracket && pairedBracket[1] == rightBracket) {
38+
return true;
39+
}
40+
}
41+
return false;
42+
}
43+
44+
/**
45+
* Check if {@code brackets} is balanced
2546
*
26-
* @param s
27-
* @return
47+
* @param brackets the brackets
48+
* @return {@code true} if {@code brackets} is balanced, otherwise {@code false}
2849
*/
29-
static boolean is_balanced(String s) {
50+
public static boolean isBalanced(String brackets) {
51+
if (brackets == null) {
52+
throw new IllegalArgumentException("brackets is null");
53+
}
3054
Stack<Character> bracketsStack = new Stack<>();
31-
char[] text = s.toCharArray();
32-
for (char x : text) {
33-
switch (x) {
34-
case '{':
35-
case '<':
55+
for (char bracket : brackets.toCharArray()) {
56+
switch (bracket) {
3657
case '(':
3758
case '[':
38-
bracketsStack.push(x);
59+
case '{':
60+
bracketsStack.push(bracket);
3961
break;
40-
case '}':
41-
if (!bracketsStack.empty() && bracketsStack.pop() == '{') {
42-
break;
43-
} else {
44-
return false;
45-
}
46-
case '>':
47-
if (!bracketsStack.empty() && bracketsStack.pop() == '<') {
48-
break;
49-
} else {
50-
return false;
51-
}
5262
case ')':
53-
if (!bracketsStack.empty() && bracketsStack.pop() == '(') {
54-
break;
55-
} else {
56-
return false;
57-
}
5863
case ']':
59-
if (!bracketsStack.empty() && bracketsStack.pop() == '[') {
60-
break;
61-
} else {
64+
case '}':
65+
if (!(!bracketsStack.isEmpty() && isPaired(bracketsStack.pop(), bracket))) {
6266
return false;
6367
}
68+
break;
69+
default: /* other character is invalid */
70+
return false;
6471
}
6572
}
66-
return bracketsStack.empty();
73+
return bracketsStack.isEmpty();
6774
}
6875

69-
/**
70-
*
71-
* @param args
72-
* @TODO remove main method and Test using JUnit or other methodology
73-
*/
74-
public static void main(String args[]) {
75-
try (Scanner in = new Scanner(System.in)) {
76-
System.out.println("Enter sequence of brackets: ");
77-
String s = in.nextLine();
78-
if (is_balanced(s)) {
79-
System.out.println(s + " is balanced");
80-
} else {
81-
System.out.println(s + " ain't balanced");
82-
}
83-
}
76+
77+
public static void main(String[] args) {
78+
assert isBalanced("[()]{}{[()()]()}");
79+
assert !isBalanced("[(])");
8480
}
8581
}

0 commit comments

Comments
 (0)