이러한 문자 '(' 및 ')'만 있는 두 개의 대괄호 시퀀스 s 및 t가 있다고 가정합니다. s와 t의 연결된 문자열이 균형이 맞는지 확인해야 합니다. 연결은 s | t 또는 t | s.
따라서 입력이 s ="()()))", t ="()(()(")와 같으면 출력은 True가 됩니다. 왜냐하면 t | s를 연결하면 "() (()(()()))", 균형이 잡혀 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- is_balanced_parenthesis() 함수를 정의합니다. 문자열이 필요합니다.
- 스택 :=새 목록
- 0~문자열 크기 범위의 i에 대해
- 문자열[i]가 '('와 같으면
- 문자열[i]를 스택에 푸시
- 그렇지 않으면
- 스택이 비어 있으면
- 거짓을 반환
- 그렇지 않으면
- 스택에서 팝
- 스택이 비어 있으면
- 문자열[i]가 '('와 같으면
- 스택이 비어 있지 않으면
- 거짓을 반환
- 참 반환
- 메인 방법에서 다음을 수행하십시오 -
- is_balanced_parenthesis(s + t)가 참이면
- 참 반환
- is_balanced_parenthesis(t + s)를 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
def is_balanced_parenthesis(string):
stack = []
for i in range(len(string)):
if string[i] == '(':
stack.append(string[i])
else:
if len(stack) == 0:
return False
else:
stack.pop()
if len(stack) > 0:
return False
return True
def solve(s, t):
if is_balanced_parenthesis(s + t):
return True
return is_balanced_parenthesis(t + s)
s = "()()))"
t = "()(()("
print(solve(s, t)) 입력
"()()))", "()(()(" 출력
True