[TOC]
# 题目
来自leetcode中文社区
https://leetcode-cn.com/problems/valid-parentheses/description/
给定一个只包括 `'(',')','{','}','[',']' `的字符串,判断字符串是否有效。
有效字符串需满足:
1. 左括号必须用相同类型的右括号闭合。
2. 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
# 分析
![](https://box.kancloud.cn/348237e82aa9fa9a5f57cfc9dd9a0ef3_1141x424.png)
一样的话就出栈
栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素
# 代码
~~~
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
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 topChar = stack.pop();
//如果右侧的括号是这个,但是左侧的括号不是他们匹配的,就返回false
if (c == ')' && topChar != '(') {
return false;
}
if (c == ']' && topChar != '[') {
return false;
}
if (c == '}' && topChar != '{') {
return false;
}
}
}
//如果栈还有字符,就表示他里面还有字符,但是没有人和他匹配了
return stack.isEmpty();
}
}
~~~