LeetCode-20-有效的括号

题目

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

1
2
输入:s = "()"
输出:true

示例 2:

1
2
输入:s = "()[]{}"
输出:true

示例 3:

1
2
输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

题解

这题其实很简单了,用栈的思想就很好解决了,具体的方法为:

  • 先判断s的长度,如果是奇数可以直接return false
  • 然后遍历s,遇到右括号我们入栈对应的左括号;
  • 遇到左括号我们直接出栈,如果栈空出不了,或者出栈元素和当前左括号不一致,return false
  • 最后返回栈是否是空的,空的说明字符串有效
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Solution {
public boolean isValid(String s) {
if (s.length() % 2 != 0) { // s 长度必须是偶数
return false;
}
Deque<Character> st = new ArrayDeque<>();
for (char c : s.toCharArray()) {
if (c == '(') {
st.push(')'); // 入栈对应的右括号
} else if (c == '[') {
st.push(']');
} else if (c == '{') {
st.push('}');
} else if (st.isEmpty() || st.pop() != c) { // c 是右括号
return false; // 没有左括号,或者左括号类型不对
}
}
return st.isEmpty(); // 所有左括号必须匹配完毕
}
}

LeetCode-20-有效的括号
https://excelius.xyz/leetcode-20-有效的括号/
作者
Ther
发布于
2024年7月10日
许可协议