算法学习(二)递归求解字符括号匹配问题

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列
括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

数据范围:字符串长度 0\le n \le 100000≤n≤10000

要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)

我的解法:

        在递归字符串的过程中,采用stack保存当前字符,每一次递归将字符与集合最后一个元素进行匹配,如果匹配成功,则清除最后一个元素或添加当前元素,进入下一次递归,最后保证集合为空,说明字符串合法

Stackstack = new Stack<>();
    public boolean isValid (String s) {
        int index = 0;
        return a(index, s);
    }
    public boolean a(int index, String s) {
        if(index==s.length()){//最后判断
            return stack.size()>0?false:true;
        }
        String value = s.charAt(index) + "";
        if (stack.size() <= 0) {
            if (value.equals("(") || value.equals("{") || value.equals("[")) {
                stack.push(value);
            }else
                return false;
        } else {
            if (value.equals("(") || value.equals("{") || value.equals("[")) {
                stack.push(value);
            } else {
                if (value.equals(")")) {
                    if (stack.peek().equals("(")) {
                        stack.pop();
                    } else {
                        return false;
                    }
                } else if (value.equals("]")) {
                    if (stack.peek().equals("[")) {
                        stack.pop();
                    } else {
                        return false;
                    }
                } else {
                    if (stack.peek().equals("{")) {
                        stack.pop();
                    } else {
                        return false;
                    }
                }
            }
        }
        return a(index+1,s);

    }

你可能感兴趣的:(算法学习,1024程序员节)