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()] ;
}
}