首页 > 试题广场 >

摩尔斯电码解码

[编程题]摩尔斯电码解码
  • 热度指数: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
测试数据有问题,测试数据没考虑int的越界。
测试用例 111101101001110110011111001010101100111101110010001111011110
会造成数据越界,用64位的整数可以算出来正确结果是1520481317175
但是OJ的标准答案的结果是62894391
python 代码:
text = input()
dp = [0 for i in text]
dp[0] = 1
for i in range(1, len(text)):
    dp[i] += dp[i - 1]
    if text[i - 1] == '1':
        dp[i] += dp[i - 2] if i >= 2 else 1
    if i >= 2 and text[i - 2] == '1':
        dp[i] += dp[i - 3] if i >= 3 else 1
print(dp[-1])

发表于 2022-04-16 01:10:22 回复(1)