잘못된 괄호 제거
s
이 주어지면 유효하지 않은 괄호의 최소 개수를 제거하여 입력 문자열을 유효하게 만드십시오.가능한 모든 결과를 반환합니다. 어떤 순서로든 답변을 반환할 수 있습니다.
예 1:
입력: s = "()())()"
출력: ["(())()","()()()"]
예 2:
입력: s = "(a)())()"
출력: ["(a())()","(a)()()"]
예 3:
입력: s = ")("
출력: [""]
제약:
1 <= s.length <= 25
s
는 소문자 영문자와 괄호 '('
및 ')'
로 구성됩니다. 20
에는 최대 s
개의 괄호가 있습니다. 해결책:
class Solution:
def isValid(self, s: str) -> bool:
stack = []
valid = True
for bracket in s:
if bracket == '(':
stack.append(bracket)
elif bracket == ')':
if len(stack) > 0:
if stack.pop() + bracket != '()':
valid = False
break
else:
valid = False
break
if len(stack) > 0:
valid = False
return valid
def removeInvalidParentheses(self, s: str) -> List[str]:
n = len(s)
paths = [("", 0, 0)]
btoi = { '(': 1, ')': -1 }
i = 0
mindels = n
op = set()
visited = set()
while i < len(paths):
curr, j, currctr = paths[i]
if j == n:
if self.isValid(curr):
if n - len(curr) < mindels:
mindels = n - len(curr)
op = { curr }
elif n - len(curr) == mindels:
op.add(curr)
if j < n and j - len(curr) <= mindels:
nctr = currctr + btoi.get(s[j], 0)
if nctr >= 0 and (curr + s[j], j + 1) not in visited:
visited.add((curr + s[j], j + 1))
paths.append((curr + s[j], j + 1, nctr))
if s[j] == '(' or s[j] == ')' and (curr, j + 1) not in visited:
visited.add((curr, j + 1))
paths.append((curr, j + 1, currctr))
i += 1
return list(op)
Reference
이 문제에 관하여(잘못된 괄호 제거), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/theabbie/remove-invalid-parentheses-59d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)