สมมติว่าเรามีสตริง s ซึ่งสามารถหมุน (rotate) ที่จุดใดจุดหนึ่งได้เพียงครั้งเดียว เราต้องการหาความยาวของสตริงย่อยแบบพาลินโดรม (palindromic substring) ที่ยาวที่สุดที่ได้จากการทำเช่นนี้
เช่น ถ้าข้อมูลนำเข้าคือ s = "elklev" ผลลัพธ์จะเป็น 5 เนื่องจากเราสามารถหมุนระหว่าง "el" และ "klev" เพื่อได้ "levelk" สตริงย่อยพาลินโดรมที่ยาวที่สุดคือ "level" ความยาว 5
ขั้นตอนการแก้ปัญหา
s2 := s + s(ต่อสตริงกับตัวเอง)max_len := 0- วนลูป
xตั้งแต่ 0 ถึงlen(s) - 1:- วนลูป
yตั้งแต่ 0 ถึงlen(s):temp := s2[x : x + y]- ถ้า
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