LeetCode 20 : 효과적인 괄호 유효 괄호

단지 주어진 포함 '(', ')', '{', '}', '[', ']'문자열, 그것은 문자열이 유효한지 여부를 결정합니다.

바로 문자를 포함하는 문자열을 감안할 때 '(', ')', '{', '}',를 '['하고 ']', 입력 문자열이 유효한 경우 결정합니다.

유효한 문자열을 충족해야합니다 :

  1. 왼쪽 브래킷은 동일한 유형의 닫는 괄호에 의해 폐쇄해야합니다.
  2. 왼쪽 괄호가 올바른 순서로 닫아야합니다.

입력 문자열은 유효하다 :

  1. 오픈 브라켓은 브라켓의 동일한 유형에 의해 폐쇄해야합니다.
  2. 열기 괄호가 올바른 순서로 닫아야합니다.

빈 문자열을 참고 유효한 문자열로 간주 될 수있다.

빈 문자열도 유효한 것으로 간주되고 있습니다.

예 1 :

输入: "()"
输出: true

예 2 :

输入: "()[]{}"
输出: true

예 3 :

输入: "(]"
输出: false

예 4 :

输入: "([)]"
输出: false

예 5 :

输入: "{[]}"
输出: true

문제 해결 아이디어 :

아주 간단한 질문, 스택에 각 문자열은, 간단하게 판단 할 수있다. 예를 들면 :

输入: "{[]}"
初始栈为空,'{' 入栈
下一个字符
栈顶元素 '{'与 '[' 不匹配,'[' 入栈
下一个字符
栈顶元素 '['与 ']' 匹配,'[' 出栈
下一个字符
栈顶元素 '{'与 '}' 匹配,'}' 出栈
结束,栈为空,返回 True

키가 문자인지 여부를 결정, 일치하는 기준은 반대 중괄호 문자는 같은 문자가 아니다. 스위치는 세 괄호 문자의 종류, 또는 if 문 세를 확인하는 데 사용할 수 있습니다, 다음, 또는 당신은 해시 테이블 매핑 브래킷 관계를 사용할 수 있습니다.

자바:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();//初始化栈
        for (char b : s.toCharArray()) {
            switch (b) {
                case '(': {
                    stack.push(')');
                    break;
                }
                case '{': {
                    stack.push('}');
                    break;
                }
                case '[': {
                    stack.push(']');
                    break;
                }
                default: {//不匹配的情况返回false
                    if (stack.isEmpty() || stack.pop() != b) {
                        return false;
                    }
                }
            }
        }
        return stack.isEmpty();//栈为空则证明全部匹配,返回true,否则返回false
    }
}

파이썬 :

참고 : 파이썬이 전환되지 않습니다 ... 경우 ... 문을 공식에 ​​의해 판사 그래서 대신의 경우 ...

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for c in s:
            if c == '[':
                stack.append(']')
            elif c == '(':
                stack.append(')')
            elif c == '{':
                stack.append('}')
            elif len(stack) == 0 or stack.pop() != c:
                return False
        return len(stack) == 0

마이크로 채널 대중 숫자에 오신 것을 환영합니다주의 : 사랑 버그 쓰기

추천

출처www.cnblogs.com/zhangzhe532/p/11287310.html