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

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


สมมติว่าเรามีสองสตริง s1 และ s2 เราต้องหาขนาดของสตริงที่ยาวที่สุด s3 ซึ่งเป็นสตริงย่อยพิเศษของทั้ง s1 และ s2

เราสามารถพูดได้ว่าสตริง x เป็นสตริงย่อยพิเศษของสตริง y อื่น หากสามารถสร้าง x ได้โดยการลบอักขระ 0 ตัวขึ้นไปจาก y

ดังนั้น หากอินพุตเป็นเหมือน s1 ='pineapple' s2 ='people' ผลลัพธ์จะเป็น 5 เนื่องจากสตริงย่อยพิเศษคือ 'peple' ขนาด 5

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

  • prev :=พจนานุกรมใหม่ ซึ่งหากไม่มีคีย์บางคีย์ ให้คืนค่า 0
  • สำหรับ i ในช่วง 0 ถึงขนาด s1 - 1 ให้ทำ
    • cur :=พจนานุกรมใหม่ ซึ่งหากไม่มีคีย์บางคีย์ ให้คืนค่า 0
    • สำหรับ j ในช่วง 0 ถึงขนาด s2- 1 ให้ทำ
      • cur[j] :=prev[j - 1] + 1 เมื่อ s1[i] เหมือนกับ s2[j] มิฉะนั้น ค่าสูงสุดของ cur[j -1] และ prev[j]
    • ก่อนหน้า :=cur
  • ส่งคืนก่อนหน้า[ขนาดของ s2 -1]

ตัวอย่าง

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

from collections import defaultdict
def solve(s1, s2):
   prev = defaultdict(int)
   for i in range(len(s1)):
      cur = defaultdict(int)
      for j in range(len(s2)):
         cur[j] = prev[j - 1] + 1 if s1[i] == s2[j] else max(cur[j - 1], prev[j])
      prev = cur
   return prev[len(s2)-1]

s1 = 'pineapple'
s2 = 'people'
print(solve(s1, s2))

อินพุต

'pineapple', 'people'

ผลลัพธ์

5