Leetcode刷题(第20题)——有效的括号

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
1、左括号必须用相同类型的右括号闭合。
2、左括号必须以正确的顺序闭合。
示例 1
输入:s = "()"
输出:true

示例2
输入:s = "()[]{}"
输出:true

示例3
输入:s = "(]"
输出:false
 class Solution {
        public boolean isValid(String s) {
            //新建栈,用以存储左括号
            Stack stack = new Stack<>();

            //for循环遍历字符串s,遇到左括号入栈,遇到右括号出栈,判断两个括号是否匹配
            for(int i = 0;i < s.length();i++){
                char ch = s.charAt(i);
                //若字符char为左括号,则入栈
                if(ch == '(' || ch == '[' || ch == '{'){
                    stack.push(ch);
                }else{  //若为右括号,则开始判断
                    if(!stack.isEmpty()){   //当栈不为空时,弹出栈顶元素,看看两个括号是否匹配
                        char outbrackets = stack.pop();
                        if( !func(outbrackets,ch) ){    //若不匹配则返回false
                            return false;
                        }
                    }else{  //当栈为空时,说明在这个右括号前面没有左括号,不符合题意,返回false
                        return false;
                    }
                }
            }

            //当for循环遍历完后,若栈中不为空,说明还剩下多余的左括号,同样不符合题意,返回false
            if(!stack.isEmpty()){
                return false;
            }
            return true;
        }
        //func函数用于判断两个括号是否匹配
        public boolean func(char a,char b){
            if(a == '(' && b == ')'){
                return true;
            }else if(a == '[' && b == ']'){
                return true;
            }else if(a == '{' && b == '}'){
                return true;
            }
            return false;
        }
    }

    public static void main(String[] args) {
        Solution s  = new Solution();
        System.out.println(s.isValid("{}"));
    }

}

你可能感兴趣的:(数据结构与算法基础,leetcode,算法,职场和发展)