力扣20(有效的括号)
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
示例:
输入:s = "()" 输出:true
解题思路
- 使用栈的结构(先进的后出去)
- 简单观察可以看出,只要是左括号,无脑压栈就可以了,而遇到右括号,就要看看栈顶(栈非空)元素是否能和当前遍历到的元素是否匹配,匹配就pop(),若是空栈或者不匹配,就push()
class Solution {
public boolean isValid(String s) {
Stack<Character> stack=new Stack<>();
int len=s.length();
for(int i=0;i<len;i++){
//拿到左括号不用想,直接压栈即可,右括号单独考虑一下
char c2=s.charAt(i);
if(isLeft(c2)){
stack.push(c2);
}else{
if(!stack.isEmpty()&&isMatched(stack.peek(),c2)){
stack.pop();
}else{
stack.push(c2);
}
}
}
return stack.isEmpty();
}
private boolean isLeft(char c){
if(c=='('||c=='['||c=='{'){
return true;
}
return false;
}
private boolean isMatched(char c1,char c2){
if(c1=='('){
return c2==')';
}else if(c1=='['){
return c2==']';
}else if(c1=='{'){
return c2=='}';
}else{
return false;
}
}
}