import java.util.*;


public class Solution {
   public int solve(String nums) {

        // 检查边界条件:空字符串、null或以0开头的字符串都返回0
        if (nums == null || nums.length() == 0 || nums.charAt(0) == '0') {
            return 0;
        }

        int n = nums.length();

        // prevPrev表示前前一个位置的结果,初始值为1(空字符串有一种解码方式)
        int prevPrev = 1;
        // prev表示前一个位置的结果,初始值为1(第一个字符有一种解码方式)
        int prev = 1;

        // 从第二个字符开始遍历字符串
        for (int i = 2; i <= n; i++) {
            int curr = 0; // 当前位置的结果初始化为0
            char currChar = nums.charAt(i - 1); // 获取当前字符
            // 如果当前字符不是'0',则可以单独解码为一个字母
            if (currChar != '0') {
                curr += prev;
            }


            // 检查由前一个字符和当前字符组成的两位数是否在10-26范围内
            int twoDigit = Integer.parseInt(nums.substring(i - 2, i));
            if (twoDigit >= 10 && twoDigit <= 26) {
                curr += prevPrev;
            }


            // 更新prevPrev和prev的值,为下一次迭代做准备
            prevPrev = prev;
            prev = curr;
        }

        // 返回最终结果,即最后一个位置的解码方式总数
        return prev;
    }
}