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;
}
}