import java.util.*;


public class Solution {
    /**
     * 解码
     * @param nums string字符串 数字串
     * @return int整型
     */
    public int solve (String nums) {
       if(nums == null || nums.length() == 0) {
           return 0 ;
       }
       //预处理,出去前导零
        int index = 0 ; //第一个不为零的字符的索引
        for( ; index < nums.length() ; index ++) {
            if(nums.charAt(index) != '0') {
                break ;
            }
        }
        nums = nums.substring(index) ;
        if(nums.length() == 0) return 0 ;
        if(nums.length() == 1) return 1 ;
        int f[] = new int[nums.length()+1] ;//f[i]表示前i个数字可能的结果
        f[0] = 1 ;
        f[1] = 1 ;
        //转移方程:f[i] = [f[i-1],nums[i-1]能表示一个字母] + [f[i-2],nums[i-1,i-2]能表示一位字母]
        for(int i = 2 ; i < f.length ;  i++) {
            String lastnumStr = nums.substring(i-1,i) ;
            int lastnum = Integer.parseInt(lastnumStr) ;
            if(lastnum > 0) {//最后一个数字能代表一个字母
                f[i] += f[i-1] ;
            }
            
            lastnumStr = nums.substring(i-2,i) ;
            lastnum = Integer.parseInt(lastnumStr) ;
            if(lastnum >=10 && lastnum <= 26) {//如果最后两个数字能代表一个字母
                f[i] += f[i-2] ;
            }
        }
        return f[nums.length()] ;
    }
}