- 有效的括号
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
示例 2:
输入: "()[]{}"
输出: true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:使用栈
可以将给定字符串遍历,如果是遍历到的元素是{
, (
, [
则进行入栈操作,如果遍历到的元素是}
, )
, ]
则检测栈顶元素是否与之配对,若不配对则说明括号没有有效闭合,返回false;若配对则将栈顶元素出栈,再继续遍历下一个元素,直到遍历完成。由于左括号遇到匹配的右括号会出栈,所以如果字符串中的所有左括号与右括号是相等的,则最后栈会为空。
如:
()[]{}
- 遍历到
(
,将(
入栈,此时栈中元素为(
- 遍历下一个元素为
)
,由于(
与)
配对,将(
出栈,此时栈为空 - 接着遍历下一个元素为
[
,将[
入栈,此时栈中元素为[
- 遍历下一个元素为
]
,由于[
与]
配对,将[
出栈,此时栈为空 - 接着遍历下一个元素为
{
,将{
入栈,此时栈中元素为{
- 遍历下一个元素为
}
,{
与}
配对,将{
出栈,此时栈为空,且遍历结束了,返回true。
示例代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
}
else {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if (c == ')' && top != '(') {
return false;
}
if (c == ']' && top != '[') {
return false;
}
if (c == '}' && top != '{') {
return false;
}
}
}
return stack.isEmpty();
}
}