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

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


สมมติว่าเรามีสตริงตัวเลข s อย่างที่เราทราบดีว่าสตริงย่อยที่ยอดเยี่ยมคือสตริงย่อยที่ไม่ว่างเปล่าของ s ซึ่งเราสามารถทำการสลับจำนวนเท่าใดก็ได้เพื่อทำให้มันเป็นพาลินโดรม เราต้องหาความยาวของความยาวสูงสุดของสตริงย่อยที่น่ากลัวของ s

ดังนั้น หากอินพุตเป็นเหมือน s ="4353526" ผลลัพธ์จะเป็น 5 เพราะ "35352" เป็นสตริงย่อยที่ยาวที่สุด เราสามารถสร้าง "35253" palindrome ได้

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • น :=0

  • pos_map :=แผนที่ที่มีคีย์ 0 และค่าที่สอดคล้องกันคือขนาดของ s

  • max_len :=1

  • สำหรับฉันในช่วงขนาด s - 1 ถึง 0, ลดลง 1 ทำ

    • n :=n XOR (2^s[i])

    • ถ้า n มีอยู่ใน pos_map แล้ว

      • max_len :=สูงสุดของ max_len และ pos_map[n]-i

    • สำหรับ j ในช่วง 0 ถึง 9 ทำ

      • m :=n XOR 2^j

      • ถ้า m อยู่ใน pos_map แล้ว

        • max_len :=สูงสุดของ max_len และ pos_map[m]-i

    • ถ้าไม่ได้อยู่ใน pos_map แล้ว

      • pos_map[n] :=ผม

  • ส่งคืน max_len

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

def solve(s):
   n = 0
   pos_map = {0:len(s)}

   max_len = 1

   for i in range(len(s)-1, -1, -1):
      n = n ^ (1 << int(s[i]))

      if n in pos_map:
         max_len = max(max_len, pos_map[n]-i)

      for j in range(10):
         m = n ^ (1 << j)
         if m in pos_map:
            max_len = max(max_len, pos_map[m]-i)

      if n not in pos_map:
         pos_map[n] = i

   return max_len

s = "4353526"
print(solve(s))

อินพุต

"4353526"

ผลลัพธ์

5