สมมติว่าเรามีสตริง s ซึ่งเราสามารถหมุน ณ จุดใดก็ได้เพียงครั้งเดียว เราต้องหาความยาวของสตริงย่อยพาลินโดรมที่ยาวที่สุดที่เราหาได้จากการดำเนินการนี้
ดังนั้น หากอินพุตเป็น s ="elklev" ผลลัพธ์จะเป็น 7 เนื่องจากเราสามารถหมุนระหว่าง "el" และ "klev" เพื่อให้ได้ "levelk" ดังนั้นความยาวสตริงย่อยพาลินโฟลิกที่ยาวที่สุดคือ 5
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
s2 :=ต่อ s สองครั้ง
-
max_len :=0
-
สำหรับ x ในช่วง 0 ถึงขนาด s − 1 ทำ
-
สำหรับ y ในช่วง 0 ถึงขนาดของ s ทำ
-
temp :=s2[จากดัชนี x ถึง x + y]
-
ถ้า temp เป็น palindrome และขนาดของ temp> max_len แล้ว
-
max_len :=ขนาดอุณหภูมิ
-
-
-
-
ส่งคืน max_len
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, s): s2 = 2 * s max_len = 0 for x in range(len(s)): for y in range(len(s) + 1): temp = s2[x : x + y] if temp == temp[::−1] and len(temp) > max_len: max_len = len(temp) return max_len ob = Solution() s = "elklev" print(ob.solve(s))
อินพุต
"elklev"
ผลลัพธ์
5