有效的括号

2021-01-28  本文已影响0人  Tank_Mao

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

示例 4:

输入:s = "([)]"
输出:false

示例 5:

输入:s = "{[]}"
输出:true

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

下面是我自己写的答案,希望大佬们不吝指教!

class Solution {
    public boolean isValid(String s) {
         Stack<Character> stack = new Stack<>();
        //遍历字符串s
        for(int i = 0; i < s.length(); i++){
            //若是左括号,压入栈
            if(s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{'){
                stack.push(s.charAt(i));
            }
            //若是遍历到右括号时,stack为空,说明左括号比右括号少
            else if(stack.empty()){
                System.out.println("左括号比右括号少!");
                return false;
            }
            //若是右括号,对比栈顶元素与s.charAt(i)是否匹配,若匹配,弹出栈顶元素;否则,return false.
            else if((stack.peek() == '(' && s.charAt(i) == ')')  || (stack.peek() == '[' && s.charAt(i) == ']')  || (stack.peek() == '{' && s.charAt(i) == '}') ){
                stack.pop();
            }
            else 
                return false;
        }
        //遍历结束后,若stack不为空,说明左括号比右括号多
        if(!stack.empty()){
            System.out.println("左括号比右括号多!");
            return false;
        }
        return true;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读