划分型动态规划 - 字符串解密问题

时间:2021-07-25
本文章向大家介绍划分型动态规划 - 字符串解密问题,主要包括划分型动态规划 - 字符串解密问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.问题描述

有一段由A-Z组成的字母串信息被加密成数字串
加密方式为A->1,B->2,...,Z->26
给定加密后的字符串S[1...N-1],问有多少种方式解密成字母串
例子:
输入:
-12
输出:
-2(AB或L)

2.代码

//
// Created by Administrator on 2021/7/22.
//

#ifndef C__TEST01_STRINGDP_HPP
#define C__TEST01_STRINGDP_HPP

#include <vector>
/*
有一段由A-Z组成的字母串信息被加密成数字串
加密方式为A->1,B->2,...,Z->26
给定加密后的字符串S[1...N-1],问有多少种方式解密成字母串
例子:
输入:
- 12
输出:
- 2(AB或L)
*/

#include <vector>

class StringDP{
public:
    StringDP(vector<int> charInputN);
    int algorithmDP(vector<int> &charInput);
private:
    vector<int> charInput;
};

StringDP::StringDP(vector<int> charInputN):
charInput(charInputN){
    charInput.resize(charInputN.size());
}

int StringDP::algorithmDP(vector<int> &charInput){

    if(charInput.size() == 0){
        return 0;
    }

    vector<int> f;
    f.resize(charInput.size()+1);
    f[0] = 1; //Initilization,0 is the null
    int temp;

    for(int i = 1; i < f.size() ; ++i){
        f[i] = 0;
        if(0 < charInput[i-1] && charInput[i-1]<= 9) f[i] += f[i-1];
        temp = charInput[i-2] * 10 + charInput[i-1];
        if(10 <= temp && temp <= 26) f[i] += f[i-2];
    }
    return f[f.size() - 1];
}

#endif //C__TEST01_STRINGDP_HPP

main.cpp测试

#include <iostream>
using namespace std;
#include "StringDP.hpp"

int main() {
    vector<int> ss = {1,2, 3};
    StringDP sdp(ss);
    cout << sdp.algorithmDP(ss) << endl;
    return 0;
}

主要是给自己看的,所以肯定会出现很多错误哈哈哈哈哈

原文地址:https://www.cnblogs.com/yoshinb/p/15058532.html