@@ -0,0 +1,2128 @@
+import java.util.Stack;%0A%0Apublic class LeetCode0591 %7B%0A%0A    public boolean isValid(String code)%0A    %7B%0A        if (code == null %7C%7C code.length() == 0) %7B%0A            return true;%0A        %7D%0A%0A        if (code.startsWith(%22%3C!%22) %7C%7C !code.startsWith(%22%3C%22)) %7B%0A            return false;%0A        %7D%0A%0A        Stack%3CString%3E stack = new Stack%3CString%3E();%0A%0A        String sub = %22%22;%0A        for (int i = 0; i %3C code.length(); i++) %7B%0A%0A            sub += code.charAt(i);%0A            if (!sub.startsWith(%22%3C%22)) %7B%0A                sub = %22%22;%0A                continue;%0A            %7D%0A%0A            if (sub.startsWith(%22%3C!%5BCDATA%5B%22)) %7B%0A                if (sub.endsWith(%22%5D%5D%3E%22)) %7B%0A                    sub = %22%22;%0A                %7D%0A            %7D else if (sub.startsWith(%22%3C/%22)) %7B%0A                if (sub.endsWith(%22%3E%22)) %7B%0A                    String tagName = sub.substring(2, sub.length() - 1);%0A                    if (stack.isEmpty() %7C%7C !stack.pop().equals(tagName)) %7B%0A                        return false;%0A                    %7D%0A%0A                    if (i %3C code.length() - 1 && stack.isEmpty()) %7B%0A                        return false;%0A                    %7D%0A                    sub = %22%22;%0A                %7D%0A            %7D else if (sub.startsWith(%22%3C%22)) %7B%0A                if (sub.endsWith(%22%3E%22)) %7B%0A                    String tagName = sub.substring(1, sub.length() - 1);%0A                    if (!checkTagName(tagName)) %7B%0A                        return false;%0A                    %7D%0A                    stack.add(tagName);%0A                    sub = %22%22;%0A                %7D%0A            %7D%0A        %7D%0A%0A        return stack.isEmpty() && sub.length() == 0;%0A    %7D%0A%0A    private boolean checkTagName(String tagName)%0A    %7B%0A        if (tagName.length() %3E 9 %7C%7C tagName.length() %3C 1) %7B%0A            return false;%0A        %7D%0A        for (int i = 0; i %3C tagName.length(); i++) %7B%0A            if (!Character.isUpperCase(tagName.charAt(i))) %7B%0A                return false;%0A            %7D%0A        %7D%0A        return true;%0A    %7D%0A%0A    public static void main(String%5B%5D args)%0A    %7B%0A        LeetCode0591 leetcode = new LeetCode0591();%0A        System.out.println(leetcode.isValid(%22%3CA%3E%3C/A%3E%3CB%3E%3C/B%3E%22));%0A    %7D%0A%7D

Add LeetCode0591.java