首页 > 试题广场 >

摩尔斯电码解码

[编程题]摩尔斯电码解码
  • 热度指数:3591 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
已知摩尔斯电码和字符映射关系如下:
  • A -> 0
  • B -> 1
  • C -> 10
  • D -> 11
  • E -> 100
  • F -> 101
  • G -> 110
  • H -> 111
当前我们获取到了一串01数字字符串,需要进行摩尔斯电码解码,请问共有多少种解码方法?

输入描述:
一行由0和1组成的字符串


输出描述:
一行一个数字表示答案,即解码方法数量
示例1

输入

11

输出

2

说明

有D和BB两种解法
示例2

输入

100

输出

3

说明

有E,BAA和CA三种解法

备注:
输入字符串长度范围为1~100
输出解码方法数不超过2147483647
var s=readline();
console.log(fn(s));

function fn(s){
    var n=s.length;
    var dp=new Array(n+2).fill(1);
   
    for(let i=n-1;i>0;i--){
        dp[i]=dp[i+1];
        if (s[i-1]=='1'){
            if (i+2<=n+1) dp[i]+=dp[i+2];
            if (i+3<=n+1) dp[i]+=dp[i+3];
        }
        dp[i]=dp[i]%Math.pow(2,32);
    }
    return dp[1]
}

发表于 2022-04-07 17:26:32 回复(1)
const str = readline()
const towArr = ["10","11"]
const threeArr = ["100","101","110","111"]
const dp = new Array(str.length);
dp[0] = 1
dp[1] = 1
for(let i = 2; i<=str.length;i++){
    dp[i] = dp[i-1]
    if(towArr.indexOf(str.substring(i-2,i))!== -1) 
        dp[i] = dp[i]+dp[i-2]
    if(i>2 && threeArr.indexOf(str.substring(i-3,i))!==-1)
        dp[i] = dp[i] + dp[i-3]
}
console.log(dp[str.length])
通过率:41/50
dp解法
发表于 2021-08-30 23:27:04 回复(0)