/* (C) 2024 YourCompanyName */ package dynamic_programming; /** * Created by gouthamvidyapradhan on 01/04/2017. A message containing letters from A-Z is being * encoded to numbers using the following mapping: * * <p>'A' -> 1 'B' -> 2 ... 'Z' -> 26 Given an encoded message containing digits, determine the * total number of ways to decode it. * * <p>For example, Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12). * * <p>The number of ways decoding "12" is 2. */ public class DecodeWays { /** * Main method * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { System.out.println(new DecodeWays().numDecodings("3120")); } public int numDecodings(String s) { if (s == null || s.isEmpty()) return 0; int[] dp = new int[s.length() + 2]; dp[s.length()] = 1; dp[s.length() + 1] = 1; for (int i = s.length() - 1; i >= 0; i--) { for (int j = i + 1; j < i + 3; j++) { if (j <= s.length()) { String subStr = s.substring(i, j); if (!subStr.startsWith("0")) { int intVal = Integer.parseInt(subStr); if (intVal <= 26) { dp[i] += dp[j]; } } } } } return dp[0]; } }