class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
// write code here
int n = nums.length();
if(n == 1){
if(nums == "0"){
return 0;
}
return 1;
}
vector<int> dp(n, 0);
dp[0] = 1;
if(nums[1] == '0'){
dp[1] = 1;
}
else{
if(check(nums.substr(0,2))){
dp[1] = 2;
}
else{
dp[1] = 1;
}
}
for(int i=2; i<n; i++){
if(nums[i] == '0'){
string cur = nums.substr(i-1, 2);
if(check(cur)){
dp[i] = dp[i-2];
}
else{
return 0;
}
}
else{
string cur = nums.substr(i-1, 2);
if(check(cur)){
dp[i] = dp[i-1]+dp[i-2];
}
else{
dp[i] = dp[i-1];
}
}
}
return dp[n-1];
}
bool check(string s){
int num = stoi(s);
if(num>=10 && num<=26){
return true;
}
return false;
}
};