题目要求
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
使用栈实现,对括号的匹配。
import java.util.Stack;
class Solution {
public static boolean isValid(String s) {
// 初始化存储字符的栈
Stack<Character> sign = new Stack();
// 把字符串s的第一个字符压入栈内
sign.push(s.charAt(0));
// 循环比较字符串s的字符是否与栈顶的字符匹配
for (int i = 1; i < s.length(); i++){
//若栈为空,则将s中的第i个字符压入栈内。
//否则,比较栈顶字符与当前第i个字符是否满足匹配条件。
if (!sign.empty()){
char c = sign.peek();
// 若满足匹配条件,则将栈顶元素弹出。
//否则,将第i个字符压入栈。
if ((c == '(' && s.charAt(i) == ')') || (c == '[' && s.charAt(i) == ']')
|| (c == '{' && s.charAt(i) == '}')){
sign.pop();
}else{
sign.push(s.charAt(i));
}
}
else{
sign.push(s.charAt(i));
}
}
if (sign.empty()){
return true;
}
return false;
}
}