20. Valid Parentheses

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

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.

Note that an empty string is also considered valid.

Example 1:

Input: "()"
Output: true

Example 2:

Input: "()[]{}"
Output: true

Example 3:

Input: "(]"
Output: false

Example 4:

Input: "([)]"
Output: false

Example 5:

Input: "{[]}"

Output: true

大意是:给出一个括号字符串,判断是不是合法的

没什么思路,然后看了讨论里大佬的代码,真的很厉害,

思路:每一看到一个左括号就入栈一个匹配的右括号,如果来的不是左括号,那有有两种可能:

    情况一:来的是右括号,如果是合法的,必须要跟stack栈顶的符号一致;那栈其实也是有两种情况:

                栈情况一:栈为空——》不合法

                栈情况二:栈不为空,那么就要判断栈顶字符和来的字符作判断,一致———》合法,不一致——》不合法

    情况二:来的是空,

                 栈情况一:栈为空,——》合法;

                栈情况二:栈为空,——》不合法

知识点:

1.

public char[] toCharArray()
将String字符串转化为char型的字符数组

2.for循环,对数组遍历

for(char c:str.toCharArray()){}

3.在如果非空,而且栈顶字符等于来的字符时候,那应该是:只需要弹出栈顶,然后继续做后续判断,不需要返回值的

所以这一个操作可以在判断语句就做好,不用进入到判断条件里面

代码

class Solution {
    public boolean isValid(String s) {
        Stack stack = new Stack<Character>();
        for(Character c:s.toCharArray()){//这里很重要,之前是定义为char类型,但是因为stack.pop出来的是object类型,结果在判断条件里一致报类型不符合错误
            if(c=='(')
                stack.push(')');
            else if(c=='[')
                stack.push(']');
            else if(c=='{')
                stack.push('}');
            else if(stack.isEmpty()){
                return false;
            }else if(!stack.isEmpty()){
                if(stack.pop()!=c){
                    return false;
                }
            }
        }
        return stack.isEmpty();
        
    }
   
}









猜你喜欢

转载自blog.csdn.net/u013177799/article/details/80224260