मान लीजिए हमारे पास 'a' = 1, 'b' = 2, ... 'z' = 26 जैसा मैपिंग है, और हमारे पास एक एन्कोडेड संदेश message स्ट्रिंग है, हमें उन तरीकों की संख्या गिननी है जिनसे इसे डिकोड किया जा सकता है।
उदाहरण के लिए, यदि इनपुट message = "222" है, तो आउटपुट 3 होगा, क्योंकि इसे 3 तरीकों से डिकोड किया जा सकता है: bbb, bv, और vb।
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
- memo := message के आकार + 1 के बराबर आकार की 0 से भरी सूची
- 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] + memo[i-1]
- यदि n2_valid सत्य है, तो memo[i] := 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