สมมติว่าเรามีวงเล็บสองลำดับ 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