Stack easying

版权声明:作者:xp_9512 来源:CSDN 版权声明:本文为博主原创文章,转载请附上博文链接! 原文: https://blog.csdn.net/qq_40981804/article/details/91360281

有效括号

  • 题目

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

有效字符串需满足:

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

注意空字符串可被认为是有效字符串。

  • 示例

示例 1:

输入: “()” 输出: true

示例 2:

输入: “()[]{}” 输出: true

示例 3:

输入: “(]” 输出: false

示例 4:

输入: “([)]” 输出: false

示例 5:

输入: “{[]}” 输出: true

  • 思路
    利用栈的性质,先进后出,遇到左括号则压入栈,遇到右括号则与栈顶元素匹配,若匹配成功则将栈顶元素弹出,反之返回false。
  • 案例
class Solution {
    //用于比较的函数
    private HashMap<Character,Character> mapping;
    public Solution(){
        this.mapping = new HashMap<>();
        this.mapping.put(')','(');
        this.mapping.put(']','[');
        this.mapping.put('}','{');
    }
    //比较函数
    public boolean isValid(String s) {
        //初始化一个栈 ,备用
        Stack<Character> stack = new Stack<>();
        for(int i = 0;i < s.length(); i++){
            //获得字符串中的第一个字符
            char c = s.charAt(i);
            //如果当前字符是以括号结尾 则获取栈顶元素
            if(this.mapping.containsKey(c)){
                // 获取堆栈的顶部元素。如果堆栈为空,请设置虚拟值“#”
                char topElement = stack.empty() ? '#' : stack.pop();
                //如果此括号的映射与堆栈的top元素不匹配,则返回false。
                if (topElement != this.mapping.get(c)) {
                    return false;
                }
            }else {
                // 否则就入栈
                stack.push(c);
            }

        }
        return stack.isEmpty();
    }
    //测试函数
    public static void  main(String[] args){

        String line = "[]{}(){{{()}}}";


            boolean ret = new Solution().isValid(line);

            String out = booleanToString(ret);

            System.out.print(out);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40981804/article/details/91360281