Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาการลบขั้นต่ำที่จำเป็นในการสร้างวงเล็บที่ถูกต้องใน Python


สมมติว่าเรามีสตริง s ที่มีวงเล็บ '(' , ')' และอักขระภาษาอังกฤษตัวพิมพ์เล็ก เราต้องลบจำนวนวงเล็บขั้นต่ำ ( '(' หรือ ')' จากตำแหน่งใดๆ ) เพื่อให้สตริงที่เป็นผลลัพธ์มีความถูกต้องและต้องส่งคืนสตริงที่ถูกต้องในที่สุด สตริงวงเล็บจะใช้ได้เมื่อเป็นไปตามเกณฑ์เหล่านี้ทั้งหมด -

  • สตริงว่างเปล่าและมีอักขระตัวพิมพ์เล็กเท่านั้น หรือ

  • สตริงสามารถเขียนเป็น AB (A ต่อกับ B) โดยที่ A และ B เป็นสตริงที่ถูกต้อง หรือ

  • สตริงสามารถเขียนเป็นรูปแบบของ (A) โดยที่ A เป็นสตริงที่ถูกต้อง

ดังนั้น หากอินพุตเป็น s ="m)n(o)p" ผลลัพธ์จะเป็น "mn(o)p"

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • stack :=รายการใหม่

  • ดัชนี :=ชุดใหม่

  • ผม :=0

  • สำหรับแต่ละ c ใน s ทำ

    • ถ้า c เหมือนกับ '(' แล้ว

      • ดันฉันเข้ากอง

    • มิฉะนั้นเมื่อ c เหมือนกับ ')' แล้ว

      • ถ้าขนาดของ stack เท่ากับ 0 แล้ว

        • แทรก i ลงในดัชนี

      • มิฉะนั้น

        • ป๊อปจากสแต็ก

      • ผม :=ผม + 1

  • ret :=สตริงว่าง

  • ดัชนี :=เก็บองค์ประกอบทั้งหมดไว้ในดัชนี

  • สำหรับฉันในช่วง 0 ถึงขนาด s - 1 ทำ

    • ถ้าฉันไม่ได้อยู่ในดัชนีแล้ว

      • ret :=ret + s[i]

  • รีเทิร์น

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def solve(s):
   stack = []
   indexes = set()
   i = 0

   for c in s:
      if c == '(':
         stack.append(i)
      elif c == ')':
         if len(stack) == 0:
            indexes.add(i)
         else:
            stack.pop()
      i += 1

   ret = ''
   indexes = indexes.union(stack)
   for i in range(len(s)):
      if i not in indexes:
         ret += s[i]

   return ret

s = "m)n(o)p"
print(solve(s))

อินพุต

"m)n(o)p"

ผลลัพธ์

mn(o)p