মনে করুন ম্যাপিং 'a'=1, 'b'=2, ..., 'z'=26, এবং একটি এনকোডেড মেসেজ স্ট্রিং দেওয়া আছে। এটি কতভাবে ডিকোড করা যায় সেটি গণনা করতে হবে।
উদাহরণস্বরূপ, message = "222" হলে আউটপুট হবে ৩, কারণ এটি ৩ভাবে ডিকোড হয়: bbb, bv, vb।
সমাধানের ধাপসমূহ
- memo := ০ দিয়ে পূরিত তালিকা, আকার message-এর আকার + ১
- memo[0] := 1
- memo[1] := 1 যদি message[0] != "0" অন্যথায় 0
- i = 2 থেকে message-এর আকার পর্যন্ত,
- n1 := message[i-1:i]-এর সংখ্যামান
- n2 := message[i-2:i]-এর সংখ্যামান
- n1_valid := true যদি n1 > 0
- n2_valid := true যদি n2 > 9 এবং n2 < 27
- যদি n1_valid, memo[i] += memo[i-1]
- যদি n2_valid, memo[i] += memo[i-2]
- memo-এর শেষ উপাদান ফেরত দিন
উদাহরণ
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