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

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


สมมติว่าเรามีสตริง s ที่มีอักขระเพียงสามตัว 'a', 'b' และ 'c' เราจะใช้อัลกอริทึมต่อไปนี้กับสตริงกี่ครั้งก็ได้ -

  • เลือกคำนำหน้าที่ไม่เว้นว่างจาก s โดยที่อักขระทั้งหมดในคำนำหน้าเหมือนกัน

  • เลือกคำต่อท้ายที่ไม่เว้นว่างจาก s โดยที่อักขระทั้งหมดในส่วนต่อท้ายเหมือนกัน

  • คำนำหน้าและส่วนต่อท้ายไม่ปะติดปะต่อกัน

  • อักขระจากคำนำหน้าและคำต่อท้ายต้องเหมือนกัน

  • ลบทั้งคำนำหน้าและส่วนต่อท้ายออกจาก s

สุดท้าย เราต้องค้นหาความยาวต่ำสุดของ s หลังจากดำเนินการดังกล่าวเป็นจำนวนเท่าใดก็ได้ (อาจเป็นศูนย์ครั้ง)

ดังนั้นหากอินพุตเป็น s ="aabccabba" ผลลัพธ์จะเป็น 3 เพราะในตอนแรกเราสามารถเลือกคำนำหน้า ="aa" และคำต่อท้าย ="a" เพื่อให้สตริงหลังการลบเป็น "bccabb" ได้ select prefix ="b" และ suffix "bb" ดังนั้น string หลังการลบคือ "cca" ซึ่งมีความยาว 3

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

  • s :=จัดคิวด้วย s

  • ในขณะที่ขนาดของ s> 1 และ s[0] เป็นองค์ประกอบสุดท้ายของ s ให้ทำ

    • chk :=s[0]

    • ในขณะที่ s และ s[0] เหมือนกัน ทำ

      • ลบองค์ประกอบด้านซ้ายออกจาก s

    • ในขณะที่ s ไม่ว่างและองค์ประกอบสุดท้ายของ s เหมือนกับ chk ให้ทำ

      • ลบองค์ประกอบสุดท้ายออกจาก s

  • ขนาดส่งคืนของ s

ตัวอย่าง

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

from collections import deque
def solve(s):
   s = deque(s)
   while len(s) > 1 and s[0] == s[-1]:
      chk = s[0]
      while s and s[0] == chk:
         s.popleft()
      while s and s[-1] == chk:
         s.pop()
   return len(s)

s = "aabccabba"
print(solve(s))

อินพุต

"aabccabba"

ผลลัพธ์

3