给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
思路:
利用堆栈,
1. 遍历字符串的每个字符
1) 遇到左括号,则压入堆栈
2) 当栈顶为为左括号,而字符串的下一个字符为对应的右括号时,弹出栈顶元素;
当栈顶元素为左括号,而字符串的下一个字符不为对应的右括号时,或者 堆栈为空而下一个字符不是左括号时,此时说明字符串不是一个有效括号,退出遍历流程。
3) 循环执行 1) 与 2)
java代码:
- class Solution {
- public boolean isValid(String s) {
- Stack
stack = new Stack<>(); - boolean result = true;
- 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 (!stack.empty() && (stack.peek() == '(' && s.charAt(i) == ')'
- || stack.peek() == '[' && s.charAt(i) == ']'
- || stack.peek() == '{' && s.charAt(i) == '}')) {
- stack.pop();
- } else {
- result = false;
- break;
- }
- }
-
- return result&&stack.isEmpty();
- }
-
- }