算法_代码(字符串是否有效)

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

括号必须以正确的顺序关闭,”()” 和 “()[]{}” 是有效的但是 “(]” 和 “([)]” 不是。

    -- 实现方法一
    public boolean isValid(String s) {

        if (null == s 
                || s.trim().length() <= 1
                || s.length()%2 != 0) {
            return false;
        }

        List<Character> list = new ArrayList<Character>();
        for (char c : s.toCharArray()) {
            if (c == '('){
                list.add(')');
                continue;
            }else if (c == '{'){
                list.add('}');
                continue;
            } else if (c == '['){
                list.add(']');
                continue;
            }

            if (list.isEmpty()
                    || list.get(list.size()-1) != c){
                return false;
            } else {
                list.remove(list.size()-1);
            }
        }
        return list.isEmpty();
    }

    -- 实现方法二
    public boolean isValid1(String s) {

        if (null == s 
                || s.trim().length() <= 1
                || s.length()%2 != 0) {
            return false;
        }

        Stack<Character> stack = new Stack<Character>();
        for (char c : s.toCharArray()) {
            if (c == '(')
                stack.push(')');
            else if (c == '{')
                stack.push('}');
            else if (c == '[')
                stack.push(']');
            else if (stack.isEmpty() || stack.pop() != c)
                return false;
        }
        return stack.isEmpty();
    }

原理: 用栈的方式peek,获取顶部内容值,并删除内容值

java.util.Stack
E push(E item)
把项压入堆栈顶部。
E pop()
移除堆栈顶部的对象,并作为此函数的值返回该对象。
E peek()
查看堆栈顶部的对象,但不从堆栈中移除它。
boolean empty()
测试堆栈是否为空。
int search(Object o)
返回对象在堆栈中的位置,以 1 为基数。

猜你喜欢

转载自blog.csdn.net/u012794505/article/details/79639685