51 lines
1.5 KiB
Java
51 lines
1.5 KiB
Java
public class Brackets {
|
|
public static boolean checkBrackets(String str){
|
|
int mismatchedBrackets = 0;
|
|
for(char ch:str.toCharArray()){
|
|
if(ch == '['){
|
|
mismatchedBrackets++;
|
|
}else if(ch == ']'){
|
|
mismatchedBrackets--;
|
|
}else{
|
|
return false; //non-bracket chars
|
|
}
|
|
if(mismatchedBrackets < 0){ //close bracket before open bracket
|
|
return false;
|
|
}
|
|
}
|
|
return mismatchedBrackets == 0;
|
|
}
|
|
|
|
public static String generate(int n){
|
|
if(n % 2 == 1){ //if n is odd we can't match brackets
|
|
return null;
|
|
}
|
|
String ans = "";
|
|
int openBracketsLeft = n / 2;
|
|
int unclosed = 0;
|
|
while(ans.length() < n){
|
|
if(Math.random() >= .5 && openBracketsLeft > 0 || unclosed == 0){
|
|
ans += '[';
|
|
openBracketsLeft--;
|
|
unclosed++;
|
|
}else{
|
|
ans += ']';
|
|
unclosed--;
|
|
}
|
|
}
|
|
return ans;
|
|
}
|
|
|
|
public static void main(String[] args){
|
|
String[] tests = {"", "[]", "][", "[][]", "][][", "[[][]]", "[]][[]"};
|
|
for(int i = 0; i <= 16; i+=2){
|
|
String bracks = generate(i);
|
|
System.out.println(bracks + ": " + checkBrackets(bracks));
|
|
}
|
|
|
|
for(String test: tests){
|
|
System.out.println(test + ": " + checkBrackets(test));
|
|
}
|
|
}
|
|
}
|