
- C++ Basics
- C++ Home
- C++ Overview
- C++ Environment Setup
- C++ Basic Syntax
- C++ Comments
- C++ Data Types
- C++ Variable Types
- C++ Variable Scope
- C++ Constants/Literals
- C++ Modifier Types
- C++ Storage Classes
- C++ Operators
- C++ Loop Types
- C++ Decision Making
- C++ Functions
- C++ Numbers
- C++ Arrays
- C++ Strings
- C++ Pointers
- C++ References
- C++ Date & Time
- C++ Basic Input/Output
- C++ Data Structures
- C++ Object Oriented
- C++ Classes & Objects
- C++ Inheritance
- C++ Overloading
- C++ Polymorphism
- C++ Abstraction
- C++ Encapsulation
- C++ Interfaces
Decode Ways II in C++
Suppose there is a message, that is containing letters from A-Z is being encoded to numbers using the following mapping way −
'A' -> 1, 'B' -> 2, ... , 'Z' -> 26
Now, the encoded string can also contain the character '*', which can be treated as one of the numbers from 1 to 9. So if we have the encoded message containing digits and the character '*', then we have to find the total number of ways to decode it. If the answer is very long, we can use mod 109 + 7 to get the final result. So if the input is only *, then there may be 9 possible ways, these are all numbers from 1 to 9, so these are A to I.
To solve this, we will follow these steps −
- Define a function add(), this will take a, b,
- return ((a mod m) + (b mod m)) mod m
- Define a function mul(), this will take a, b,
- return ((a mod m) * (b mod m)) mod m
- From the main method do the following −
- n := size of s
- Define an array dp of size n + 1
- dp[0] := 1
- if s[0] is same as '0', then −
- return 0
- dp[1] := 9 when s[0] is same as ' * ' otherwise 1
- for initialize i := 2, when i <= n, update (increase i by 1), do −
- first := s[i - 2], second := s[i - 1]
- if second is same as '*', then −
- dp[i] := add(dp[i], mul(9, dp[i - 1]))
- otherwise when second > '0', then −
- dp[i] := dp[i - 1]
- if first is same as '*', then −
- if second is same as '*', then −
- dp[i] := add(dp[i], mul(15, dp[i - 2]))
- otherwise when second <= '6', then −
- dp[i] := add(dp[i], mul(2, dp[i - 2]))
- Otherwise
- dp[i] := add(dp[i], mul(1, dp[i - 2]))
- if second is same as '*', then −
- otherwise when first is same as '1' or first is same as '2', then −
- if second is same as '*', then −
- if first is same as '1', then −
- dp[i] := add(dp[i], mul(9, dp[i - 2]))
- otherwise when first is same as '2', then −
- dp[i] := add(dp[i], mul(6, dp[i - 2]))
- if first is same as '1', then −
- otherwise when (first - '0') * 10 + (second - '0') <= 26, then −
- dp[i] := add(dp[i], dp[i - 2])
- if second is same as '*', then −
- return dp[n]
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; typedef long long int lli; const lli m = 1e9 + 7; class Solution { public: lli add(lli a, lli b){ return ((a % m) + (b % m)) % m; } lli mul(lli a, lli b){ return ((a % m) * (b % m)) % m; } int numDecodings(string s) { int n = s.size(); vector <int> dp(n + 1); dp[0] = 1; if(s[0] == '0') return 0; dp[1] = s[0] == '*' ? 9 : 1; for(int i = 2; i <= n; i++){ char first = s[i - 2]; char second = s[i - 1]; if(second == '*'){ dp[i] = add(dp[i], mul(9, dp[i - 1])); }else if(second > '0'){ dp[i] = dp[i - 1]; } if(first == '*'){ if(second == '*'){ dp[i] = add(dp[i], mul(15, dp[i - 2])); }else if (second <= '6'){ dp[i] = add(dp[i], mul(2, dp[i - 2])); }else{ dp[i] = add(dp[i], mul(1, dp[i - 2])); } }else if(first == '1' || first == '2'){ if(second == '*'){ if(first == '1'){ dp[i] = add(dp[i], mul(9, dp[i - 2])); }else if(first == '2'){ dp[i] = add(dp[i], mul(6, dp[i - 2])); } }else if((first - '0') * 10 + (second - '0') <= 26){ dp[i] = add(dp[i], dp[i - 2]); } } } return dp[n]; } }; main(){ Solution ob; cout << (ob.numDecodings("2*")); }
Input
“2*”
Output
15
- Related Articles
- Decode Ways in Python
- Program to find number of ways we can decode a message in Python
- Decode String in C++
- Decode Your Nightmares
- Encode and Decode Strings in C++
- How to decode the string in android?
- Function to decode a string in JavaScript
- Arduino – base64 encode and decode
- How to decode an encoded string in JavaScript?
- Program to recover decode XORed array in Python
- Program to decode a given message in C++
- How to decode JSON into objects in Golang?
- Program to find decode XORed permutation in Python
- How to encode and decode URl in typescript?
- How to decode a job advertisement?

Advertisements