สมมติว่าเรามีวงเล็บสองลำดับ s และ t โดยมีเฉพาะอักขระเหล่านี้ '(' และ ')' เราต้องตรวจสอบว่าสตริงที่ต่อกันของ s และ t มีความสมดุลหรือไม่ การต่อข้อมูลสามารถทำได้โดย s | t or t | ส.
ดังนั้น หากอินพุตเป็น s ="()()))", t ="()(()(" ผลลัพธ์จะเป็น True เพราะถ้าเราเชื่อม t | s เข้าด้วยกัน เราจะได้ "() (()(()()))" ซึ่งมีความสมดุล
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน is_balanced_parenthesis() สิ่งนี้จะใช้สตริง
- stack :=รายการใหม่
- สำหรับ i ในช่วง 0 ถึงขนาดของสตริง ให้ทำ
- ถ้า string[i] เหมือนกับ '(' แล้ว
- ดันสตริง[i] ลงในสแต็ก
- มิฉะนั้น
- ถ้า stack ว่างเปล่า
- คืนค่าเท็จ
- มิฉะนั้น
- ป๊อปจากสแต็ก
- ถ้า stack ว่างเปล่า
- ถ้า string[i] เหมือนกับ '(' แล้ว
- ถ้า stack ไม่ว่างก็
- คืนค่าเท็จ
- คืนค่า True
- จากวิธีหลัก ให้ทำดังนี้ -
- ถ้า is_balanced_parenthesis(s + t) เป็นจริง แล้ว
- คืนค่า True
- ผลตอบแทน 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