RosettaCodeData/Task/Balanced-brackets/Java/balanced-brackets.java

50 lines
1.5 KiB
Java
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
public class BalancedBrackets {
public static boolean hasBalancedBrackets(String str) {
int brackets = 0;
for (char ch : str.toCharArray()) {
if (ch == '[') {
brackets++;
} else if (ch == ']') {
brackets--;
} else {
return false; // non-bracket chars
2013-04-10 12:38:42 -07:00
}
2017-09-23 10:01:46 +02:00
if (brackets < 0) { // closing bracket before opening bracket
2013-04-10 12:38:42 -07:00
return false;
}
}
2017-09-23 10:01:46 +02:00
return brackets == 0;
2013-04-10 12:38:42 -07:00
}
2017-09-23 10:01:46 +02:00
public static String generateBalancedBrackets(int n) {
assert n % 2 == 0; // if n is odd we can't match brackets
char[] ans = new char[n];
2013-04-10 12:38:42 -07:00
int openBracketsLeft = n / 2;
int unclosed = 0;
2017-09-23 10:01:46 +02:00
for (int i = 0; i < n; i++) {
if (Math.random() >= 0.5 && openBracketsLeft > 0 || unclosed == 0) {
ans[i] = '[';
2013-04-10 12:38:42 -07:00
openBracketsLeft--;
unclosed++;
2017-09-23 10:01:46 +02:00
} else {
ans[i] = ']';
2013-04-10 12:38:42 -07:00
unclosed--;
}
}
2017-09-23 10:01:46 +02:00
return String.valueOf(ans);
2013-04-10 12:38:42 -07:00
}
2017-09-23 10:01:46 +02:00
public static void main(String[] args) {
for (int i = 0; i <= 16; i += 2) {
String brackets = generateBalancedBrackets(i);
System.out.println(brackets + ": " + hasBalancedBrackets(brackets));
2013-04-10 12:38:42 -07:00
}
2017-09-23 10:01:46 +02:00
String[] tests = {"", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]"};
for (String test : tests) {
System.out.println(test + ": " + hasBalancedBrackets(test));
2013-04-10 12:38:42 -07:00
}
}
}