public int numDecodings(String s) {
        if (s.length() < 1 || s.charAt(0) == '0')
            return 0;
        int[] dp = new int[s.length() + 1];
        dp[s.length()] = 1;
        dp[s.length() - 1] = s.charAt(s.length() - 1) != '0' ? 1 : 0;
        for (int i = s.length() - 2; i >= 0; --i) {
            if (s.charAt(i) == '0')
                continue;
            else {
                int val = Integer.parseInt(s.substring(i, i + 2));
                if (val < 27) {
                    dp[i] = dp[i + 1] + dp[i + 2];
                } else {
                    dp[i] = dp[i + 1];
                }
            }

        }
        return dp[0];
    }