class Solution {
public:
    /**
    dp[i]:前i个字符编码 的结果
    当nums[i]==0时不能单独存在只能依附nums[i-1]
        当1<=nums[i-1]<=2 时 
        因为必须依附,反而减少,为dp[i-2]
        否则组成不了 返回0
    当nums[i]!=0, 可以不用依附。
        当nums[i-1]+ nums[i] <= 26且nums[i-1]!=0 可以依附也可以不依附 dp[i] = dp[i-1] + dp[i-2]
        否则 不能依附dp[i] = dp[i-1]
     */
    int solve(string nums) {
        // write code here
        int n = nums.size();
        vector<int> dp(n+1, 0);  // 错一位存储
        dp[0]=1;
        if(nums[0]=='0') return 0;
        else dp[1] = 1;
        for(int i=1; i<n; i++){
            if(nums[i]=='0'){
                if(nums[i-1] == '1' || nums[i-1]=='2') dp[i+1] = dp[i-1];
                else return 0;
            }else{
                string tmp;
                tmp.push_back(nums[i-1]);
                tmp.push_back(nums[i]);
                if(nums[i-1]=='0' || tmp > "26") dp[i+1] = dp[i];
                else dp[i+1] = dp[i]+dp[i-1];
            }
        }
        return dp[n];
    }
};

to_string() 将int float 等转化为string char 转化为stirng push_back()