一、题目
给定一个只包括( ) { } [ ] 的字符串s,判断字符串是否有效。
有效字符串:
1)左括号必须用相同类型的右括号闭合。
2)左括号必须以正确的顺序闭合。
3)每个右括号都有一个对应的相同类型的左括号。
二、思路
利用「栈」(Stack)来模拟括号的匹配过程,遵循"后进先出"的原则。
1)遇到左括号,直接压入栈中,等待后续匹配。
2)遇到右括号,
检查栈是否为空,没有左括号匹配,则无效。
栈顶的左括号是否能和当前的右括号匹配,不能则无效。
遍历完所有字符后,检查栈是否为空,非空则无效,空则是有效的括号字符串。
三、代码
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(char c : s.toCharArray()){
if(c == '(' || c == '[' || c == '{'){
stack.push(c);
}else{
//遇到右括号
if(stack.isEmpty()){
return false;//没有左括号匹配
}
char top = stack.pop();
if((c == ')' && top != '(') ||
(c == '}' && top != '{') ||
(c == ']' && top != '[')){
return false;//类型不匹配
}
}
}
return stack.isEmpty();//所有左括号都被匹配
}
}