题目
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
数据
示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例 5:输入: "{[]}"输出: true示例 6:输入: "["输出: false示例 7:输入: "]"输出: false
题解
- 创建一个栈,把所有左括号入栈
- 遇到右括号,判断栈顶的括号是否与此右括号匹配,不匹配返回false,匹配则将匹配的左括号出栈
如果都匹配,则栈最终是空的。如果栈不为空,说明输入的是奇数个括号,一定有不匹配的,则返回false
代码
``` public class ValidParentheses {
private Stack
stack = new Stack<>(); public boolean isValid(String s) {
for (int i = 0; i < s.length(); i++) {if (s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[') {stack.push(s.charAt(i));} else if (s.charAt(i) == ')') {if (stack.isEmpty()||stack.peek() != '(')return false;elsestack.pop();} else if (s.charAt(i) == '}') {if (stack.isEmpty()||stack.peek() != '{')return false;elsestack.pop();} else if (s.charAt(i) == ']') {if (stack.isEmpty()||stack.peek() != '[')return false;elsestack.pop();}}if(!stack.isEmpty())return false;return true;
} }
```
