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

โปรแกรมค้นหาหลายวิธีในการถอดรหัสข้อความใน Python


สมมติว่าเรามีการแมปเช่น 'a' =1 'b' =2, ... 'z' =26 และเรามีสตริงข้อความที่เข้ารหัส เราต้องนับจำนวนวิธีที่จะถอดรหัสได้

ดังนั้น หากอินพุตเป็นเหมือน message ="222" เอาต์พุตจะเป็น 3 เนื่องจากสามารถถอดรหัสได้ 3 วิธี:bbb, bv และ vb

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

  • memo :=รายการขนาด 0s เท่ากับขนาดข้อความ + 1

  • บันทึก[0] :=1

  • memo[1] :=1 เมื่อข้อความ[0] ไม่เหมือนกับ "0" มิฉะนั้น 0

  • สำหรับฉันอยู่ในช่วง 2 ถึงขนาดของข้อความ ทำ

    • n1 :=ค่าตัวเลขของข้อความ[จากดัชนี i-1 ถึง i]

    • n2 :=ค่าตัวเลขของข้อความ[จากดัชนี i-2 ถึง i]

    • n1_valid:=true เมื่อ n1> 0

    • n2_valid:=true เมื่อ n2> 9 และ n2 <27

    • ถ้า n1_valid เป็นจริง

      • บันทึก[i] :=บันทึก[i] + บันทึก[i-1]

    • ถ้า n2_valid เป็นจริง

      • บันทึก[i] :=บันทึก[i] + บันทึก[i-2]

  • ส่งคืนองค์ประกอบสุดท้ายของบันทึกช่วยจำ

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

ตัวอย่าง

class Solution:
   def solve(self, message):
      memo = [0 for i in range(len(message)+1)]
      memo[0] = 1
      memo[1] = 1 if message[0]!="0" else 0

      for i in range(2,len(message)+1):
         n1 = int(message[i-1:i])
         n2 = int(message[i-2:i])

         n1_valid= n1>0
         n2_valid= n2>9 and n2<27

         if n1_valid:
            memo[i]+=memo[i-1]
         if n2_valid:
            memo[i]+=memo[i-2]
      return memo[-1]
ob = Solution()
message = "2223"
print(ob.solve(message))

อินพุต

"2223"

ผลลัพธ์

5