20. 有效的括号

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false

思路:

这个问题是典型的栈在括号匹配中的应用问题。

1.若当前遍历的字符为正括号则入栈

2若当前遍历的字符为反括号则查看栈顶元素是不是对应的正括号,

      2.1若是,则栈顶元素出栈,继续遍历

      2.2若不是,则直接返回false

3.遍历完成后,判断栈是否为空,即栈顶是否指向-1,若是则返回true,否则返回false

代码:

class Solution {
    public boolean isValid(String s) {
        int top = -1;
        char[] stack = new char[s.length()];
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(c=='('||c=='['||c=='{'){
                stack[++top] = c;
            }else if(top==-1){
                return false;
            }else if((c==')'&&stack[top]=='(')||(c==']'&&stack[top]=='[')||(c=='}'&&stack[top]=='{')){
                top--;
            }else{
                return false;
            }
        }
        if(top == -1){
            return true;
        }
        return false;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章