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

โปรแกรมค้นหาจำนวนขั้นต่ำของกลุ่มสตริงที่ซ้ำซากจำเจใน Python


สมมติว่าเรามีสตริงตัวพิมพ์เล็ก s เราต้องหาจำนวนขั้นต่ำของสตริงย่อยที่ต่อเนื่องกัน ซึ่ง s ถูกแบ่งออกเป็นส่วน ๆ โดยที่แต่ละสตริงย่อยจะไม่เพิ่มขึ้นหรือไม่ลดลง ตัวอย่างเช่น หากสตริงเป็นเหมือน "pqqqr" เป็นสตริงที่ไม่ลดจำนวนลง และ "qqqp" เป็นสตริงที่ไม่เพิ่มขึ้น

ดังนั้น หากอินพุตเป็น s ="pqrsrqp" ผลลัพธ์จะเป็น 2 เพราะเราสามารถแยก s เช่น "pqrs" และ "rqp" ได้

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

  • ถ้า s ว่างแล้ว

    • คืนค่า 0

  • สุดท้าย :=s[0]

  • ทิศทาง :=1

  • นับ :=1

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

    • ถ้าถ่าน> สุดท้ายแล้ว

      • ถ้าทิศทางเหมือนกับ 1 แล้ว

        • ทิศทาง :=0

      • มิฉะนั้นเมื่อทิศทางเหมือนกับ 2 แล้ว

        • ทิศทาง :=1

        • นับ :=นับ + 1

    • มิฉะนั้นเมื่อถ่าน <สุดท้ายแล้ว

      • ถ้าทิศทางเหมือนกับ 1 แล้ว

        • ทิศทาง :=2

      • มิฉะนั้นเมื่อทิศทางเหมือนกับ 0 แล้ว

        • ทิศทาง :=1

        • นับ :=นับ + 1

    • สุดท้าย :=ถ่าน

  • จำนวนคืน

ตัวอย่าง

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

def solve(s):
   if not s:
      return 0

   last = s[0]
   direction = 1
   count = 1

   for char in s:
      if char > last:
         if direction == 1:
            direction = 0
         elif direction == 2:
            direction = 1
            count += 1
      elif char < last:
         if direction == 1:
            direction = 2
         elif direction == 0:
            direction = 1
            count += 1
      last = char

   return count

s = "pqrsrqp"
print(solve(s))

อินพุต

"pqrsrqp"

ผลลัพธ์

2