动态规划题解

问题定义:dp[i]表示长度为i的字符串有多少种匹配方式

递推公式推理:字符只有两位,所以当前i这个位置的问题是由:1.当前选i为一个字母;2.选i和i-1组合一起作为字母;得出递推公式 dp[i] = dp[i-1] + dp[i-2]

*组合时注意的情况,是从1-26编号,选一个数组为0不能递推,组合数小于10大于26不能递推

import java.util.*;

public class Solution {
    public int solve (String nums) {
       int[] dp = new int[nums.length() + 1];
       int temp;
        
       dp[0] = 1;
       if(nums.charAt(0) - '0' >0)dp[1] = 1;
       else dp[1] = 0;//如果第一个字母为0不算一种情况
       
        for(int i = 2; i < nums.length()+1; i++) {
           temp = nums.charAt(i-1)-'0';
           if(temp > 0)dp[i] += dp[i-1];
           
           temp = nums.charAt(i-1)-'0' + (nums.charAt(i-2)-'0')*10;
           if(temp>=10&&temp<=26)dp[i]+=dp[i-2];
       }
        return dp[nums.length()];
    }
}