题目:有效的括号
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
public boolean isValid(String s) { Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < s.length(); ++ i) { switch (s.charAt(i)) { case ')': if (stack.isEmpty() || !stack.pop().equals('(')) return false; break; case ']': if (stack.isEmpty() || !stack.pop().equals('[')) return false; break; case '}': if (stack.isEmpty() || !stack.pop().equals('{')) return false; break; default: stack.push(s.charAt(i)); break; } } return stack.isEmpty(); }
思路:
这是一道典型的可以用栈来解决的问题,类似的问题有 表达式求解等。
做一个空栈,一个个读入字符直到字符串结尾;
如果字符是一个开放符号(‘(’,’[’,’{’),则将其推入栈中。
如果字符是一个封闭符号(‘)’,’]’,’}’),则
当栈空时放回false;当栈不为空时,元素弹出,如果弹出的符号不是对应的开放符号,则返回false;
全部遍历完毕后,如果栈为空则返回true,栈非空则返回false。