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

ค้นหา palindrome ที่ยาวที่สุดที่เกิดขึ้นจากการลบหรือสับเปลี่ยนตัวอักษรจากสตริงใน Python


สมมติว่าเรามีสตริง เราต้องหาพาลินโดรมที่ยาวที่สุดที่สามารถสร้างได้โดยการลบหรือสับเปลี่ยนอักขระจากสตริง และถ้ามีมากกว่าหนึ่ง palindrome ให้ส่งคืนเพียงอันเดียว

ดังนั้น หากอินพุตเป็นเหมือน pqqprrs เอาต์พุตจะเป็น pqrsrqp

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

  • count :=อาร์เรย์ขนาด 256 เติม 0

  • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของสตริง ทำ

    • นับ[ASCII ของ(สตริง[i]) ] :=นับ[ASCII ของ(สตริง[i]) ] + 1

  • เริ่มต้น :=สตริงว่าง กลาง :=สตริงว่าง สิ้นสุด :=สตริงว่าง

  • ตัวอักษร :=ASCII ของ ('a')

  • while character <=ASCII of('z') ทำ

    • ถ้า count[character] AND 1 ไม่ใช่ศูนย์ แล้ว

      • กลาง :=ตัวอักษร

      • นับ[อักขระ] :=นับ[อักขระ] - 1

      • ตัวอักษร :=ตัวอักษร - 1

    • มิฉะนั้น

      • สำหรับฉันอยู่ในช่วง 0 เพื่อนับ[ตัวละคร]/2 (การหารจำนวนเต็ม) ทำ

        • เริ่มต้น :=เริ่มต้น + อักขระจาก (อักขระ)

    • ตัวอักษร :=ตัวอักษร + 1

  • end :=เริ่มต้น

  • end :=กลับด้าน

  • return เริ่มต้นต่ออักขระจาก (กลาง) ต่อท้ายสิ้นสุด

ตัวอย่าง

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

def get_palindrome(string):
   count = [0]*256
   for i in range(len(string)):
      count[ord(string[i])] += 1
   begin = ""
   mid = ""
   end = ""
   character = ord('a')
   while character <= ord('z'):
      if (count[character] & 1):
         mid = character
         count[character] -= 1
         character -= 1
      else:
         for i in range(count[character]//2):
            begin += chr(character)
      character += 1
   end = begin
   end = end[::-1]
   return begin + chr(mid) + end
string = "pqqprrs"
print(get_palindrome(string))

อินพุต

"pqqprrs"

ผลลัพธ์

pqrsrqp