Leetcode Decode Ways

来源:互联网 发布:htpc专用软件 编辑:程序博客网 时间:2024/06/06 03:03

题意:A-Z分别与1-26对应,给出一串数字求有多少中匹配的可能性。

思路:DP,记录到目前位置,最多的匹配数。

class Solution {public:    int numDecodings(string s) {        if(s.length() == 0) return 0;        map<string, bool> mm;        for(int i = 1; i <= 26; i ++) {            mm[to_string(i)] = true;        }                vector<int> re(s.length(), 0);        std::map<string, bool>::iterator it;        it = mm.find(s.substr(0, 1));        if(it == mm.end()) return 0;        re[0] = 1;        for(int i = 1; i < s.length(); ++ i) {            it = mm.find(s.substr(i, 1));            if(it != mm.end()) {                re[i] = re[i - 1];            }            it = mm.find(s.substr(i - 1, 2));            if(it != mm.end() && re[i] != 0) {                if(i == 1) re[i] = 2;                else re[i] += re[i - 2];            }            if(it != mm.end() && re[i] == 0) {                if(i == 1) re[i] = 1;                else re[i] = re[i - 2];            }                    }        return re[re.size() - 1];    }};


0 0