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

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

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