가장 바깥쪽 괄호 제거

1951 단어 theabbieleetcodedsa
유효한 괄호 문자열은 비어 있는 "" , "(" + A + ")" 또는 A + B 입니다. 여기서 AB는 유효한 괄호 문자열이고 +는 문자열 연결을 나타냅니다.
  • 예를 들어 "" , "()" , "(())()""(()(()))" 는 모두 유효한 괄호 문자열입니다.

  • 유효한 괄호 문자열s은 비어 있지 않은 경우 원시적이며, s = A + BA 비어 있지 않은 유효한 괄호 문자열과 함께 B 로 분할하는 방법이 없습니다.

    유효한 괄호 문자열 s이 주어지면 기본 분해를 고려하십시오. s = P1 + P2 + ... + Pk 여기서 Pi는 기본 유효한 괄호 문자열입니다.
    s 의 프리미티브 분해에서 모든 프리미티브 문자열의 가장 바깥쪽 괄호를 제거한 후 s 를 반환합니다.

    예 1:

    입력: s = "(()())(())"
    출력: "()()()"
    설명:
    입력 문자열은 "(()())(())"이며 기본 분해는 "(()())"+ "(())"입니다.
    각 부분의 바깥쪽 괄호를 제거하면 "()()"+ "()"= "()()()"가 됩니다.

    예 2:

    입력: s = "(()())(())(()(()))"
    출력: "()()()()(())"
    설명:
    입력 문자열은 "(()())(())(()(()))"이며 기본 분해는 "(()())"+ "(())"+ "(()(( )))".
    각 부분의 바깥쪽 괄호를 제거하면 "()()"+ "()"+ "()(())"= "()()()()(())"가 됩니다.

    예 3:

    입력: s = "()()"
    출력: ""
    설명:
    입력 문자열은 기본 분해 "()"+ "()"가 있는 "()()"입니다.
    각 부분의 바깥쪽 괄호를 제거하면 ""+ ""= ""가 됩니다.

    제약:
  • 1 <= s.length <= 105
  • s[i]'(' 또는 ')' 입니다.
  • s는 유효한 괄호 문자열입니다.

  • 해결책:

    class Solution:
        def removeOuterParentheses(self, s: str) -> str:
            n = len(s)
            stack = []
            allowed = set(range(n))
            for i in range(n):
                if s[i] == '(':
                    stack.append(i)
                else:
                    curr = stack.pop()
                    if len(stack) == 0:
                        allowed.remove(curr)
                        allowed.remove(i)
            return "".join([s[i] for i in allowed])
    

    좋은 웹페이지 즐겨찾기