가장 바깥쪽 괄호 제거
""
, "(" + A + ")"
또는 A + B
입니다. 여기서 A
및 B
는 유효한 괄호 문자열이고 +
는 문자열 연결을 나타냅니다.""
, "()"
, "(())()"
및 "(()(()))"
는 모두 유효한 괄호 문자열입니다. 유효한 괄호 문자열
s
은 비어 있지 않은 경우 원시적이며, s = A + B
및 A
비어 있지 않은 유효한 괄호 문자열과 함께 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])
Reference
이 문제에 관하여(가장 바깥쪽 괄호 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/remove-outermost-parentheses-516a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)