2
public int numDecodings(String s) {3
int[] dp = new int[s.length() + 1];6
for (int i = 1; i <= s.length(); i++) {7
for (int j = 1; j <= 26; j++) {9
&& (s.charAt(i - 1) - '0' == j10
|| s.charAt(i - 1) == '*')) { // 1 digit -> if they are equal or if *14
if (i > 1 && j >= 10 && ok(j, s.substring(i - 2, i))) { // ok() function handles 2 digits20
return dp[s.length()];23
private boolean ok(int val, String s) { // TRUE if the value s represents can equal to val.24
return (s.equals("**") && val % 10 > 025
|| s.charAt(0) == '*' && val % 10 == s.charAt(1) - '0'26
|| s.charAt(1) == '*' && val / 10 == s.charAt(0) - '0' && val % 10 > 027
|| !s.contains("*") && Integer.parseInt(s) == val);