求一个数字字符串最多能表示多少个字母组成的字符串。
动态规划.
dp[i] 表示从0~ i所能表示的最大字符串的种类数
class Solution {
public:
int numDecodings(string s) {
if(s.empty()) {
return 0;
}
vector<int> dp(s.size(), 0);
if(s[0] == '0') {
dp[0] = 0;
} else {
dp[0] = 1;
}
for(int i = 1; i < s.size(); i++) {
int val = 10 * (s[i - 1] - '0') + (s[i] - '0');
if(s[i] == '0') {
if(val == 10 || val == 20) {
if(i >= 2) {
dp[i] = dp[i - 2];
} else {
dp[i] = 1;
}
} else {
dp[i] = 0;
}
} else {
if(val < 10) {
if(i >= 2) {
if(s[i - 2] == '1' || s[i - 2] == '2') {
if(i >= 3) {
dp[i] = dp[i - 3];
} else {
dp[i] = 1;
}
} else {
dp[i] = 0;
}
} else {
dp[i] = 0;
}
} else if(val <= 26){
if(i >= 2) {
dp[i] = dp[i - 2] + dp[i - 1];
} else {
dp[i] = 2;
}
} else {
dp[i] = dp[i - 1];
}
}
}
return dp[s.size() - 1];
}
};