Computer >> Máy Tính >  >> Lập trình >> Python

Tìm palindrome dài nhất được hình thành bằng cách xóa hoặc xáo trộn các ký tự khỏi chuỗi trong Python


Giả sử chúng ta có một chuỗi; chúng ta phải tìm palindrome dài nhất có thể được tạo ra bằng cách xóa hoặc xáo trộn các ký tự khỏi chuỗi. Và nếu có nhiều hơn một palindrome thì chỉ trả về một.

Vì vậy, nếu đầu vào giống như pqqprrs, thì đầu ra sẽ là pqrsrqp.

  • Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • count:=mảng có kích thước 256, được lấp đầy bởi 0

  • đối với tôi trong phạm vi từ 0 đến kích thước của chuỗi, hãy thực hiện

    • count [ASCII of (string [i])]:=count [ASCII of (string [i])] + 1

  • begin:=blank string, mid:=blank string, end:=blank string

  • ký tự:=ASCII của ('a')

  • trong khi ký tự <=ASCII của ('z'), làm

    • nếu đếm [ký tự] VÀ 1 khác 0 thì

      • mid:=ký tự

      • count [character]:=count [character] - 1

      • character:=character - 1

    • nếu không,

      • đối với tôi trong phạm vi 0 để đếm [ký tự] / 2 (phép chia số nguyên), hãy thực hiện

        • begin:=begin + ký tự từ (ký tự)

    • ký tự:=character + 1

  • end:=begin

  • end:=kết thúc ngược lại

  • trả về ký tự nối bắt đầu từ (giữa) kết thúc nối tiếp

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

"pqqprrs"

Đầu ra

pqrsrqp