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