/*
dp[i]表示长度为i的方案总数
特殊情况s[i]=='0'
*/
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
if(s[0]=='0') return 0;
vector<int> dp(n+10);
dp[0]=1;
for(int i=1;i<n;i++)
{
dp[i]=(s[i]=='0'?0:dp[i-1]);
int k=(s[i-1]-'0')*10+(s[i]-'0');
if(i == 1)
{
if(k<=26 && k>0 && s[i-1]!='0') dp[i]++;
}
else
{
if(k<=26 && k>0 && s[i-1]!='0') dp[i]=dp[i]+dp[i-2];
}
}
return dp[n-1];
}
};