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

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;
}

posted @   蘑菇王国大聪明  阅读(55)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示