问题描述
给定一个字符串,只包含{
、}
、[
、]
、(
、)
。要求判断这个字符串是否是符合括号的原则的。题目链接:**点我**
样例输入输出
输入:{[]}
输出:true
输入:{[}]
输出:false
问题解法
使用栈存储左括号,遍历字符串,每次遇到左括号时压入栈,遇到右括号时,查看栈顶的左括号是否与这个右括号对应,如果对应,则将栈顶元素出栈,否则说明字符串不合法。当字符串遍历结束时,如果栈中元素为空,说明字符串合法,否则字符串不合法。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| class Solution { public boolean isValid(String s) { if (s == null) { return true; } Stack<Character> stack = new Stack<>(); int length = s.length(); for (int i = 0; i < length; i++) { char ch = s.charAt(i); if (ch == '[' || ch == '(' || ch == '{') { stack.push(Character.valueOf(ch)); continue; } if (stack.isEmpty()) { return false; } char topCh = stack.pop(); if (ch == ']' && topCh == '[') { continue; } if (ch == ')' && topCh == '(') { continue; } if (ch == '}' && topCh == '{') { continue; } return false; } return stack.isEmpty(); } }
|