public class BracketsVerification { public static void main(String[] args) { // test cases System.out.println(isMatched(null)); // true System.out.println(isMatched("")); // true System.out.println(isMatched("()")); // true System.out.println(isMatched("()[]")); // true System.out.println(isMatched("(()[])")); // true System.out.println(isMatched("[[](()[])]()")); // true System.out.println(isMatched("[)")); // false System.out.println(isMatched(")")); // false System.out.println(isMatched(")(")); // false System.out.println(isMatched("[[]((()[])]())")); // false } public static boolean isMatched(String brackets) { if (brackets == null || brackets.isEmpty()) { return true; } String tracking = ""; do { if (tracking.isEmpty() || !isMatched(brackets.charAt(brackets.length() - 1), tracking.charAt(0))) { tracking = brackets.charAt(brackets.length() - 1) + tracking; } else { tracking = tracking.substring(1); } brackets = brackets.substring(0, brackets.length() - 1); } while (!brackets.isEmpty()); return tracking.isEmpty(); } private static boolean isMatched(char a, char b) { return (a == '(' && b == ')') || (a == '[' && b == ']'); } }