示例:
1 输入: "(]" 2 输出: false 3 4 输入: "{[]}" 5 输出: true
思想:
这里我们使用栈。
遍历输入字符串
如果当前字符为左半边括号时,则将其压入栈中
如果遇到右半边括号时,分类讨论:
1)如栈不为空且为对应的左半边括号,则取出栈顶元素,继续循环
2)若此时栈为空,则直接返回false
3)若不为对应的左半边括号,反之返回false
代码块:
1 public static boolean isValid(String s) { 2 Stack<Character> stack = new Stack(); 3 char[] chars = s.toCharArray(); 4 for (char a: chars) { 5 if (a == '(' || a == '{' || a == '[') { 6 stack.add(a); 7 } else { 8 if(stack.isEmpty()) 9 return false; 10 if (a == ')' && stack.pop() != '(') 11 return false; 12 if (a == '}' && stack.pop() != '{') 13 return false; 14 if (a == ']' && stack.pop() != '[') 15 return false; 16 } 17 } 18 return stack.isEmpty(); 19 } 20 21 public static void main(String[] args) { 22 System.out.println(isValid("[{}]")); 23 System.out.println(isValid("((([{}])))")); 24 System.out.println(isValid("]{}()[")); 25 System.out.println(isValid("((([]))}")); 26 System.out.println(isValid("{{[]()[]}")); 27 }
结果: