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

โปรแกรมค้นหาความยาวของสตริงย่อยพาลินโดรมที่ยาวที่สุดหลังจากการหมุนครั้งเดียวใน Python


สมมติว่าเรามีสตริง 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