题目
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
提示:
1 <= s.length <= 104
s
仅由括号'()[]{}'
组成
解题思路
- 遍历字符串,如果c是左括号,则入栈
- 如果c是右括号,则将栈顶括号出栈,如果该栈顶左括号与c右括号匹配,则继续遍历,如果不匹配,则返回false
- 遍历完后,栈为空则返回true,否则返回false
Java代码
public static boolean solution(String s) {if (s.length() == 0) {return false;}Stack<Character> stack = new Stack<>();for (char c : s.toCharArray()) {if (c == '(' || c == '[' || c == '{') {stack.push(c);} else {if (stack.isEmpty()) {return false;} else {char temp = stack.pop();if (c == ')') {if (temp != '(') {return false;}} else if (c == ']') {if (temp != '[') {return false;}} else if (c == '}') {if (temp != '{') {return false;}}}}}return stack.isEmpty();
}