关于LeetCode中Valid Parentheses一题的理解

来源:互联网 发布:java游戏破解合集 编辑:程序博客网 时间:2024/06/15 22:32

题目如下:

Given a string containing just the characters '('')''{''}''[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

    这道题也是想了很久,今天走路的时候突然想到可以用压栈弹栈的方式来实现,就马上去LeetCode把它撸完了,下面是已Accepted的代码:

    public boolean isValid(String s) {        Stack<String> stack = new Stack<String>();        for(int i=0;i<s.length();i++){            char candidate = s.charAt(i);            if(candidate=='{'||candidate=='['||candidate=='('){                stack.push(candidate+"");            }else{                if(stack.isEmpty()){                    return false;                }                if((candidate=='}' && stack.peek().equals("{"))||                (candidate==']' && stack.peek().equals("["))||                (candidate==')' && stack.peek().equals("("))){                    stack.pop();                }else{                    return false;                }            }        }        if(stack.isEmpty()){            return true;        }else{            return false;        }    }
    题目的解题思路如下:

(1)如果发现是输入'{','[','('是这三种之中的一种,就直接把它们压入栈中;

(2)如果输入为'}',']',')'就需要获取栈顶的元素,如果能和这三种匹配上就直接把它探出,即如果输入为‘}’就查看栈顶元素,如果是'{'就将'{'弹出,否则返回false;

(3)如果循环结束后,栈中还存在元素,就说明有未匹配的项,应当返回false,反之则返回true。

    然后是评论区的回答,下面这个方法也是使用了“栈”,但是快一些,思路是一样的,代码如下:

public boolean isValid(String s) {char[] stack = new char[s.length()];int head = 0;for(char c : s.toCharArray()) {switch(c) {case '{':case '[':case '(':stack[head++] = c;break;case '}':if(head == 0 || stack[--head] != '{') return false;break;case ')':if(head == 0 || stack[--head] != '(') return false;break;case ']':if(head == 0 || stack[--head] != '[') return false;break;}}return head == 0;}
    依然来自评论区,思路一样,但是更精辟些,代码如下:

public boolean isValid(String s) {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();}
    大致就是这样。



0 0
原创粉丝点击